题目链接:暂无
题目大意:
有
题解:
二分枚举答案
用
那么
如果
代码:
#include <bits/stdc++.h>
using namespace std;
class Mutalisk
{
private:
int n;
int f[21][94][94];
bool Judge(const vector<int>&x,int lim)
{
memset(f,-1,sizeof f);
f[0][lim][lim]=lim;
for(int i=1;i<=n;i++)
for(int A=0;A<=lim;A++)
for(int B=0;B<=lim;B++)
if(dp[i-1][A][B]>=0)
for(int a=0;a<=A;a++)
for(int b=0;b<=B;b++)
{
int c=max(0,x[i-1]-a*9-b*3);
if(a+b+c>lim) continue;
if(c>f[i-1][A][B]) continue;
f[i][A-a][B-b]=max(f[i][A-a][B-b],f[i-1][A][B]-c);
}
for(int A=0;A<=lim;A++)
for(int B=0;B<=lim;B++)
if(f[n][A][B]>=0)
return 1;
return 0;
}
public:
int minimalAttacks(vector<int>x)
{
n=x.size();
int l=1,r=93,re,mid;
while(l<=r)
{
mid=(l+r)>>1;
if(Judge(x,mid))
{
re=mid;
r=mid-1;
}
else l=mid+1;
}
return re;
}
};