博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ--3631--Watashi's BG【枚举】
阅读量:6264 次
发布时间:2019-06-22

本文共 2035 字,大约阅读时间需要 6 分钟。

链接:

题意:有n天,告诉你每天的花费,别人给你一笔资金m,你自己也有一部分资金(能够如果花不完),每天仅仅能花自己的钱或者花资金m中的钱,不能混着花,问m最多能花多少?

思路:考虑到数据比較小,n最多仅仅有30,能够用枚举来做,枚举每天花m或者不花m,二进制枚举,复杂度2^30。这样复杂度要超时的,土豪说能够分两部分枚举,把结果存入两个数组,然后这两个数组结果再合并,复杂度n^2,这样二进制枚举最多是两个2^15,大大缩短了时间复杂度。

后来我又用dfs写了一遍,果断T,看了别人的代码,有个剪枝非常关键,当前已使用的资金与全部还未使用的资金相加假设小于等于已得到的最大值,则剪枝。

二进制枚举代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define PI acos(-1.0)#define MAXN 5000100#define eps 1e-7#define INF 0x7FFFFFFF#define LLINF 0x7FFFFFFFFFFFFFFF#define seed 131#define MOD 1000000007#define ll long long#define ull unsigned ll#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int a[200010],b[200010],va[40],vb[40];int main(){ int i,j; int n,m; int la,lb,cnta,cntb,ans; while(scanf("%d%d",&n,&m)!=EOF){ la = lb = cnta = cntb = ans = 0; for(i=0;i
=0;i--){ for(j=cntb-1;j>=0;j--){ if(a[i]+b[j]<=m){ ans = max(ans,a[i]+b[j]); break; } } } printf("%d\n",ans); } return 0;}

DFS代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define PI acos(-1.0)#define MAXN 5000100#define eps 1e-7#define INF 0x7FFFFFFF#define LLINF 0x7FFFFFFFFFFFFFFF#define seed 131#define MOD 1000000007#define ll long long#define ull unsigned ll#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int a[40],jz[40];int n,m,maxm;void dfs(int step,int cnt){ if(cnt>m) return ; maxm = max(maxm,cnt); if(step<1) return ; if(cnt+jz[step]<=maxm) return ; //防TLE剪枝 dfs(step-1,cnt); dfs(step-1,cnt+a[step]);}int main(){ int i,j; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++){ scanf("%d",&a[i]); } jz[0] = 0; for(i=1;i<=n;i++) jz[i] = jz[i-1] + a[i]; maxm = 0; dfs(n,0); printf("%d\n",maxm); } return 0;}

转载地址:http://kqzpa.baihongyu.com/

你可能感兴趣的文章
(Z)MySQL变量的使用
查看>>
浅谈命令查询职责分离(CQRS)模式
查看>>
洛谷P1481 魔族密码(LIS)
查看>>
SQL Server 访问URL 调用WebServer
查看>>
静态代码块在何时调用
查看>>
Kafka控制器选举流程剖析
查看>>
appium封装显示等待Wait类和ExpectedCondition接口
查看>>
Android 全局弹出版本更新 Dialog 思考和解决办法
查看>>
IDEA在当前类中查找方法快捷键--转
查看>>
初识少儿编程
查看>>
浏览器 UA 判断
查看>>
理解OAuth 2.0
查看>>
高并发处理思路与手段(三):消息队列
查看>>
Docker+Nginx部署Angular
查看>>
Docker & ASP.NET Core (4):容器间的连接
查看>>
beam 的异常处理 Error Handling Elements in Apache Beam Pipelines
查看>>
将png图片转换为字体图标
查看>>
/var/log/wtmp
查看>>
C# 获取机器码
查看>>
什么是医嘱?医嘱的书写内容?
查看>>