“一切都会好起来的。”|

zplqwq

园龄:3年10个月粉丝:25关注:14

题解 [USACO10JAN]Cheese Towers S

给同学讲完全背包时找到的一个好题。

题目分析

我们首先知道,如果这个题没有大奶酪,那么就是一个裸的完全背包,代码可以参考这题

这题难就难在如果我们加上大奶酪之后要怎么处理。

首先,我们知道最优解只有可能是一下两种情况:

  1. 塔内没有大奶酪,也就是完全背包的板子。
  2. 我们选择把大奶酪放到最顶端,因为如果在这个奶酪塔里有大奶酪,那么把它放到最顶端肯定不会使答案变差。

答案是两者取最大值。

对于第二种情况的处理,我们可以尝试去枚举最顶端的那个大奶酪,然后用 vi+f(tc[i])×5/4 来取最大值,从而可以求出第二种的答案。

其实这道题的核心就是第二种情况的处理,因此这里给出第二种情况的代码。

for(int i=1;i<=n;i++)
{
if(c[i]>=k)//如果是大奶酪
{
int tmp1=v[i]+f[(t-c[i])*5/4];//求出要被用来更新这个值
tmp=max(tmp1,tmp);//更新值
}
}

本文作者:zplqwq

本文链接:https://www.cnblogs.com/zplqwq/p/15695552.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   zplqwq  阅读(44)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起