首页 > 学院 > 开发设计 > 正文

HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解)

2019-11-08 01:51:25
字体:
来源:转载
供稿:网友

HDOJ(HDU).3466 Dividing coins ( DP 01背包 无后效性的理解)

题意分析

要先排序,在做01背包,否则不满足无后效性,为什么呢? 等我理解了再补上。

代码总览

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define nmax 505#define nn 505*100using namespace std;struct item{ int p; int q; int v; int rate;}a[nmax];int dp[nn];bool cmp(item x, item y){ return x.rate<y.rate;}int main(){ //freopen("in.txt","r",stdin); int N,M; while(scanf("%d%d",&N,&M)!= EOF){ memset(dp,0,sizeof(dp)); for(int i = 1; i<= N;++i) {scanf("%d%d%d",&a[i].p,&a[i].q,&a[i].v); a[i].rate = a[i].q - a[i].p;} sort(a+1,a+1+N,cmp); for(int i = 1; i<=N;++i){ for(int j =M;j>=a[i].q;--j) dp[j] = max(dp[j],dp[j-a[i].p]+a[i].v); } PRintf("%d/n",dp[M]); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表