http://acm.hdu.edu.cn/showproblem.php?pid=5410
完全背包的依赖,属于树形DP
#include <stdio.h> #include <string.h> #include <iostream> #include <queue> #include <stack> using namespace std; #define N 1005 #define INF 25000005 int weight[N],price[N],r[N]; int dp[N*2]; int main(){ int T;scanf("%d",&T); while(T--){ memset(dp,sizeof(dp)); int M,n;scanf("%d%d",&M,&n); int i,j; for(i=0;i<n;i++) scanf("%d%d%d",&price[i],&weight[i],&r[i]); for(i=0;i<n;i++){ for(j=M;j>=price[i];j--) dp[j]=max(dp[j],dp[j-price[i]]+weight[i]+r[i]); for(j=price[i];j<=M;j++) dp[j]=max(dp[j],dp[j-price[i]]+weight[i]); } printf("%d\n",dp[M]); }//while return 0; }//main原文链接:https://www.f2er.com/javaschema/284517.html