博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
01背包
阅读量:5277 次
发布时间:2019-06-14

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

( ⊙ o ⊙ ) 题目:

(⊙v⊙),代码:

1.dfs

//会超时!!!! #include
#include
using namespace std;int n,t,ans;int w[1003],v[1003];void dfs(int x,int val,int left) { if(x == n+1){ ans = max(ans,val); return ; } dfs(x+1,val,left); if(left >= w[x]) dfs(x+1,val + v[x],left - w[x]);}int main() { cin>>n>>t; for(int i=1; i<=n; i++) cin>>w[i]>>v[i]; dfs(1,0,t); cout<
<

2.dp

#include
#include
using namespace std;int n,V;int val[1333],wight[1333],f[1333];int main() { cin>>V>>n; for(int i=1; i<=n; i++) { cin>>wight[i]>>val[i]; } for(int i=1; i<=n; i++) { for(int j=V; j>=0; j--) { if(j >= wight[i]) f[j] = max(f[j],f[j-wight[i]]+val[i]); } } cout<
<

 多重背包的二进制优化:

1 #include
2 #include
3 using namespace std; 4 5 const int N = 1333333; 6 int wight,val,numb,v[N],w[N]; 7 int n,m,f[N],nl; 8 9 int main() {10 cin>>n>>m;11 for(int i=1; i<=n; i++) {12 int t = 1;13 cin>>wight>>val>>numb;14 while(numb >= t) {15 w[++nl] = wight * t;16 v[nl] = val * t;17 numb-=t;18 t*=2;19 }20 w[++nl] = wight * numb;21 v[nl] = val * numb;22 }23 for(int i=1; i<=nl; i++)24 for(int j=m; j>=w[i]; j--) 25 f[j] = max(f[j],f[j-w[i]]+v[i]);26 cout<
<

如果数据过大,还是会超时,就可以用单调队列优化。

转载于:https://www.cnblogs.com/wsdestdq/p/6814882.html

你可能感兴趣的文章
Jquery
查看>>
数学(组合,容斥):COGS 1220. 盒子与球
查看>>
poj3041(最小顶点覆盖数,二分图匹配)+hdu1150+hdu1151
查看>>
Matplotlib新手上路(中)
查看>>
ALT+TAB切换时小图标的添加 界面透明 屏幕大小 竖行字体 进程信息
查看>>
js在IE和FF下的兼容性问题
查看>>
如何保证消息队列的可靠性传输?
查看>>
其他ip无法访问Yii的gii,配置ip就可以
查看>>
js创建对象
查看>>
有状态EJBBean和无状态的EJBBean
查看>>
设计模式的几种原则
查看>>
使用json格式输出
查看>>
border-image属性在chrome中的不同效果
查看>>
我对师生关系的思考
查看>>
php做的一个简易爬虫
查看>>
python学习---购物商场与ATM
查看>>
linux删除乱码文件
查看>>
第十二篇 带控制的物料的实地盘点设置与测试
查看>>
如何在form初始化时自动隐藏FOLDER列
查看>>
ASP.NET环境中后台弹出无刷新环境中的对话框
查看>>