社区讨论

萌新不会dp,求助

P2340[USACO03FALL] Cow Exhibition G参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@lo7zkwte
此快照首次捕获于
2023/10/27 10:20
2 年前
此快照最后确认于
2023/10/27 10:20
2 年前
查看原帖
9pts
CPP
#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;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...