/** hdu5188 有限制条件的01背包问题 题目大意:有n道题i题用时ti秒,得分vi,在li时间点之前不能做出来,而且一道题不能分开几次做(一旦开始做,必须在ti时间内把它做完) 问得到w分的最小用时是多少 解题思路:很像01背包的基本题,但是有一个li分钟前不能AC的限制,因此第i道题必须在最早第(li-ti)时刻做,我们按照l-t递增排序,然后按照经典解法来做 就行了 */ #include #include #include #include using namespace std; struct note { int t,v,l; bool operator <(const note &other)const { return l-tsum) { printf("zhx is naive!\n"); continue; } sort(node,node+n); up=max(up,ans); memset(dp,0,sizeof(dp)); for(int i=0;i=node[i].l;j--) { if(j>=node[i].t) { dp[j]=max(dp[j],dp[j-node[i].t]+node[i].v); } } } int flag=0; for(int i=0;i<=up;i++) { if(dp[i]>=m) { printf("%d\n",i); flag=1; break; } } if(flag==0) { printf("zhx is naive!\n"); } } return 0; }