21.8.20总结

HNOI2015 亚瑟王

  返回  

JOISC2014 挂饰(dp)

2021/8/20 20:50:22 浏览:

题目链接
在这里插入图片描述
定义dp[i][j] 表示前i个物品 还剩下j 个钩子时的最大贡献。
dp[i][j]=max(dp[i-1][j],dp[i-1][max(j-c[i].a,0*1ll)+1]+c[i].b);
j-c[i].a 表示前面一个物品不再选择当前第i个物品时剩下的钩子数,因为挂该物品要花费一个钩子,所以要+1.


struct pe{

ll a,b;

}c[2222];

bool cmp(pe x,pe y){
return x.a>y.a;

}
ll dp[2222][2222];
signed main(){

    ll n;
    read(n);
    for(int i=1;i<=n;i++){
      read(c[i].a);
      read(c[i].b);
     //dp[0][i]=dp[i][n+1]=-inf;
    }
    for(int i=0;i<=n;i++) dp[0][i]=-inf,dp[i][n+1]=-inf;
   // dp[0][0]=dp[0][n+1]=-inf;
    dp[0][1]=0;
    sort(c+1,c+1+n,cmp);
    for(int i=1;i<=n;i++){
        for(int j=0;j<=n;j++){
       dp[i][j]=max(dp[i-1][j],dp[i-1][max(j-c[i].a,0*1ll)+1]+c[i].b);

        }
    }
    ll ma=0;
for(int i=0;i<=n;i++){
    ma=max(ma,dp[n][i]);
}
printf("%lld",ma);


}

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号