本文共 616 字,大约阅读时间需要 2 分钟。
这个题与普通的01背包问题相比,价值不是固定的,而是随时间变化的。对于1和2两件食材,可能产生的美味值为: a1-(t1+t2)b1+a2-t2b2 1 a1-t1*b1+a2-(t1+t2)*b2 2要在保证美味值最大的情况下,要使a食材比b食材先做,必须满足的条件为第1个式子大于第2个式子,化简后是t1b2<t2b1。
然后我们按这个顺序排好,就保证了在最大美味值的情况下,如果选到1和2,那么1一定是在选在2前面。 就是01背包问题了。代码如下:
#includeusing namespace std;int t,n;long long dp[100007];struct node{ long long st; long long cost; long long time;}a[57];bool cmp(node q,node w){ return q.time*w.cost =a[i].time;j--) dp[j]=max(dp[j],dp[j-a[i].time]+a[i].st-j*a[i].cost); long long ans=0; for(int i=0;i<=t;i++) ans=max(ans,dp[i]); printf("%lld\n",ans); return 0;}
转载地址:http://tsgwi.baihongyu.com/