萌新不会dp,求助
查看原帖
萌新不会dp,求助
549617
华悦泽楼主2022/9/22 18:39

9pts

#include <bits/stdc++.h>
using namespace std;
const int MAXN=405;
const int MAXJ=400000;
struct Cow{
    int iq,eq;
}cow[MAXN];
int n,f[2*MAXJ+5];
int main()
{
    memset(f,~0x3f3f3f3f,sizeof f);
    scanf("%d",&n);
    f[MAXJ]=0;
    for(int i=1;i<=n;i++){
        scanf("%d%d",&cow[i].iq,&cow[i].eq);
    }
    for(int i=1;i<=n;i++){
        if(cow[i].iq>0){
            for(int j=MAXJ;j>=-MAXJ;j--){
                if(-MAXJ<=j-cow[i].iq&&j-cow[i].iq<=MAXJ) f[j+MAXJ]=max(f[j+MAXJ],f[j-cow[i].iq+MAXJ]+cow[i].eq);
            }
        }
        else{
            for(int j=-MAXJ;j<=MAXJ;j++){
                if(-MAXJ<=j-cow[i].iq&&j-cow[i].iq<=MAXJ) f[j+MAXJ]=max(f[j+MAXJ],f[j-cow[i].iq+MAXJ]+cow[i].eq);
            }
        }
    }
    int ans=0;
    for(int j=0;j<=MAXJ;j++){
        if(f[j+MAXJ]>=0) ans=max(f[j+MAXJ],ans);
    }
    printf("%d",ans);
    
    

    return 0;
}

2022/9/22 18:39
加载中...