diff --git a/HDOJ/5188_lvshubao1314.cpp b/HDOJ/5188_lvshubao1314.cpp new file mode 100644 index 0000000..444f12a --- /dev/null +++ b/HDOJ/5188_lvshubao1314.cpp @@ -0,0 +1,73 @@ +/** +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; +}