E Battles in a Row
题意:
初始HP=H,MP=M,n个怪物,每消灭一个怪物需要消耗Ai个HP,或Bi个MP,求最多能消灭多少个怪物?
思路:
好像是个很典的DP,但是我连这场的D都没开出来(悲
设f[i][j]为到第i个怪物,HP=j时MP的最大值
显然有两种转移方式,外层从1n枚举,内层从0h枚举
答案仅需看f[i][j]的值是否大于等于0即可
int f[3001][3001];
void solve(){
int n,h,m;cin>>n>>h>>m;
memset(f,-0x3f3f3f3f,sizeof f);
f[0][h]=m;
vector<pii>a(n+1);rep(i,1,n)cin>>a[i].fi>>a[i].se;
rep(i,1,n){
for(int j=0;j<=h;j++){
if(j+a[i].fi<=h){
f[i][j]=max(f[i][j],f[i-1][j+a[i].fi]);
}
if(f[i-1][j]-a[i].se>=0){
f[i][j]=max(f[i][j],f[i-1][j]-a[i].se);
}
}
}
int ok=0;
for(int i=n;i>=0;i--){
for(int j=0;j<=h;j++){
if(f[i][j]>=0){
cout<<i<<endl;ok=1;
break;
}
}
if(ok)break;
}
}

浙公网安备 33010602011771号