题意:
有n中物品和m元,n种物品的价格为p,价值为V,当你所有的金钱小于Q时,不进行交易!
要按Q-p从小到大排序。。
#include<stdio.h> #include<string.h> #include<algorithm> #include<iostream> using namespace std; const int MAXN=550; struct Node { int p,q,v; }node[MAXN]; int dp[5500]; bool cmp(Node a,Node b)//按照 q-p 从小到大排序 { return a.q-a.p < b.q-b.p; } int main() { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<n;i++) scanf("%d%d%d",&node[i].p,&node[i].q,&node[i].v); sort(node,node+n,cmp); memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) for(int j=m;j>=node[i].q;j--) dp[j]=max(dp[j],dp[j-node[i].p]+node[i].v); printf("%d\n",dp[m]); } return 0; }