题目:https://www.luogu.org/problemnew/show/P1417
题意:
一道菜有$a,b,c$三个值。烧一道菜的时间是$c$。得到的价值是,$a-t*b$其中$t$是菜完成的时间。
问用总时间t可以烧多少菜使得总价值最大。
思路:
很容易可以想到背包,一道菜做或是不做。
即$dp[t][i] = max(dp[t][i-1], dp[t-c_i][i-1]+a_i-t*b_i)$
但是由于$t$会影响到菜的价值,也就是说菜的顺序也是有影响的。所以并不是简单的背包。
考虑两道菜$x,y$,分别考虑先做$x$和先做$y$的情况,所得到的价值分别是:
$a_x-t*b_x+a_y-(t+c_x)*b_y$和$a_y-t*b_y+a_x-(t+c_y)*b_x$,可以发现这里可以贪心。
也就是如果$c_x*b_y > c_y*b_x$那么x在前可以得到更大的价值。按着个排个序再进行背包。
1 #include 2 #include 3 #include