P5194 [USACO05DEC]Scales S

https://www.luogu.com.cn/problem/solution/P5194
涉及知识点:搜索,前缀和
黄色题
 
思路:
  • 首先,既然是求最大,那么就应该从后往前搜索,能够避免很多不必要的递归;然后,弄一个一个前缀和数组,显然,当cur+b[index]即当前加上位置i的前缀和如果小于max时,就不用继续往下了,因为就算你把它们全部都选上也不会比max大,故是无用功,剪掉;至于cur+fama[index]>C则更不用说了,这应该是很容易想得到的。


代码:
复制代码
#include <iostream> #include <algorithm> using namespace std; long long sum[1005],a[1005],ans,n,c; void dfs(int cur,long long x) { if(x>c)return; if(sum[cur-1]+x<=c) //一个剪枝:如果前面那些砝码可以全部取走,那直接取走即可。 { ans=max(ans,sum[cur-1]+x); return; } ans=max(ans,x); for(int i=1;i<cur;i++) dfs(i,x+a[i]); return; } int main() { cin>>n>>c; for(int i=1;i<=n;i++) { cin>>a[i]; sum[i]=sum[i-1]+a[i]; } dfs(n+1,0); cout<<ans<<endl; return 0; }
复制代码

 


__EOF__

本文作者灰の魔女伊蕾娜
本文链接https://www.cnblogs.com/2elaina/p/16502305.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -イレイナ  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示