题解 [USACO10JAN]Cheese Towers S
给同学讲完全背包时找到的一个好题。
题目分析
我们首先知道,如果这个题没有大奶酪,那么就是一个裸的完全背包,代码可以参考这题。
这题难就难在如果我们加上大奶酪之后要怎么处理。
首先,我们知道最优解只有可能是一下两种情况:
- 塔内没有大奶酪,也就是完全背包的板子。
- 我们选择把大奶酪放到最顶端,因为如果在这个奶酪塔里有大奶酪,那么把它放到最顶端肯定不会使答案变差。
答案是两者取最大值。
对于第二种情况的处理,我们可以尝试去枚举最顶端的那个大奶酪,然后用 来取最大值,从而可以求出第二种的答案。
其实这道题的核心就是第二种情况的处理,因此这里给出第二种情况的代码。
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 中国大陆许可协议进行许可。
标签:
DP
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步