多重背包模板 二进制优化
来源:互联网 发布:linux if语句 编辑:程序博客网 时间:2024/06/05 03:50
背包为v 重量为w[i] 价值为p[i] 共有N个物品
#include<iostream>#include<string.h>#include<string>using namespace std;constint N=3;constint V=8;int w[N+1]={0,1,2,2};int v[N+1]={0,6,10,20};int num[N+1]={0,10,5,2};int f[N+1][V+1]={0};int main(){int n=0;for(int i=0;i<=N;i++)f[i][0]=0;for(int i=0;i<=V;i++)f[0][i]=0;//开始打表for(int i=1;i<=N;i++){for(int j=w[i];j<=V;j++){f[i][j]=0;n=min(num[i],j/w[i]);//可以放的个数for(int k=0;k<=n;k++)f[i][j]=max(f[i][j],f[i-1][j-k*w[i]]+k*v[i]);cout<<f[i][j]<<" ";}cout<<endl;}cout<<f[N][V]<<endl;return 0;}
多重背包加二进制优化
#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>#include <cmath>using namespace std;int main(){ int T,n,k,count; int a[101],b[101]; int f[100001]; int i,j,m,p,g; cin>>T; while(T--) { memset(f,0,sizeof(f)); cin>>n; for(i=1;i<=n;i++) cin>>a[i]; for(i=1;i<=n;i++) cin>>b[i]; cin>>k; for(i=1;i<=n;i++) { p=0; g=0; while(b[i]>g) { for(j=k;j>=a[i]*g;j--) { f[j]=max(f[j],f[j-a[i]*g]+a[i]*g); } b[i]-=g; g=pow(2,p); p++; } for(j=k;j>=a[i]*b[i];--j) { f[j]=max(f[j],f[j-a[i]*b[i]]+a[i]*b[i]); } } if(f[k]==k) cout<<"Yes"<<endl; else cout<<"No"<<endl; }}
阅读全文
0 0
- 多重背包模板 二进制优化
- 多重背包二进制优化模板
- 多重背包模板解析 (二进制优化)
- 多重背包的二进制优化模板
- 多重背包二进制优化模板分析
- 多重背包模板--二进制优化模板&&单调队列优化模板
- 多重背包二进制优化
- 多重背包二进制优化
- 多重背包二进制优化
- 多重背包--二进制优化
- HDU 2844 Coins (多重背包+二进制优化模板)
- HDU1059 Dividing(多重背包,二进制优化,模板题)
- hdu1059Dividing 多重背包二进制优化
- HDU1059Dividing 二进制优化多重背包
- HDU2844_Coins【多重背包】【二进制优化】
- Dividing(多重背包+二进制优化)
- HDOJ2844Coins【多重背包+二进制优化】
- POJ1014Dividing【多重背包+二进制优化】
- P1090 合并果子
- linux的PHP环境搭建与wordpress
- 新手易犯错误之java基本类型数据整除
- P1615 西游记公司
- 使用栈技术实现10以内加减乘除算式的计算
- 多重背包模板 二进制优化
- 虚拟串口与虚拟机配置笔记
- LeetCode——79. Word Search
- JAVA语言:使用公式C=(5/9)*(F-32)打印下列华氏温度与摄氏温度对照表
- bat脚本
- QT 5.7.0 版本说明
- Koa学习2
- 1.8 开始第一幅“码绘”——运用条件判断,让懵逼脸能够做出不同表情
- Linux Shell脚本攻略1:小试牛刀(1)