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;
    }
}
posted @ 2025-06-16 20:29  Marinaco  阅读(59)  评论(0)    收藏  举报
//雪花飘落效果