dp之多重背包(二进制优化)
void solve(int v,int w,int c)
{
int count=0;
for(int k=1;k<=c;k<<=1)
{
val[count]=k*v;
size[count++]=k*w;
c-=k;
}
if(c>0)
{
val[count]=c*v;
size[count++]=c*w;
}
for(int i=0;i<count;i++)
{
cout<<val[i]<<" "<<size[i]<<endl;
}
}
多重转为01模版
hdu 3732
思路:因为v,w都是0到10的数 ,所以会有很多v和w重复,把他们统计出数量,弄成多重背包,然后二进制优化,转为01
#include <string>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <iostream>
using namespace std;
int cnt;
int v[100005];
int w[100005];
int dp[10005];
int n,m;
void change(int a,int b,int c)
{
int k=1;
for(k=1;k<=c;k<<=1)
{
/*v[cnt]=k*a;
w[cnt++]=k*b;*/
for(int j=m;j>=k*b;j--)
{
dp[j]=max(dp[j],dp[j-k*b]+k*a);
}
c-=k;
}
if(c>0)
{
/*v[cnt]=k*a;
w[cnt++]=k*b;*/
for(int j=m;j>=c*b;j--)
{
dp[j]=max(dp[j],dp[j-c*b]+c*a);
}
}
return;
}
int main()
{
int a,b;
int map[11][11];
char s[1005];
while(~scanf("%d %d",&n,&m))//记得加~或者EOF 不然你怎么优化都是超时
{
memset(map,0,sizeof(map));
memset(dp,0,sizeof(dp));
cnt=0;
for(int i=0;i<n;i++)
{
scanf("%s %d %d",&s,&a,&b);
getchar();
map[a][b]++;
}
for(int i=1;i<11;i++)
{
for(int j=1;j<11;j++)
{
if(map[i][j]>0)
{
int k=1;
int c=map[i][j];
for(k=1;k<=c;k<<=1)
{
/*v[cnt]=k*a;
w[cnt++]=k*b;*/
for(int s=m;s>=k*j;s--)
{
dp[s]=max(dp[s],dp[s-k*j]+k*i);
}
c-=k;
}
if(c>0)
{
/*v[cnt]=k*a;
w[cnt++]=k*b;*/
for(int s=m;s>=c*j;s--)
{
dp[s]=max(dp[s],dp[s-c*j]+c*i);
}
}
}
}
}
/*for(int i=0;i<cnt;i++)
{
for(int j=m;j>=w[i];j--)
{
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
}*/
printf("%d\n",dp[m]);
}
return 0;
}
最新文章
- android 事件监听
- C# JavascriptSerializer与匿名对象打造Json的完美工具
- Npoi Web 项目中(XSSFWorkbook) 导出出现无法访问已关闭的流的解决方法
- 【Cocos2d入门教程四】Cocos2d-x菜单篇
- salt-API基本验证命令
- javascrip实现无缝滚动
- Eclipse相关集锦
- Java集合实现
- <;转>;Python中的新式/经典类的查找方式
- [C++]2-1 水仙花数
- Rsync + Sersync 实现数据增量同步
- 反转链表(python3)
- <;<;、|=、&;的小例子
- Unity Shader序列帧动画学习笔记
- poj 1328 Radar Installation 排序贪心
- SQL plus连接远程Oralce数据库
- java 多线程7: (suspend方法与resume方法) 挂起与恢复
- Power Designer逆向工程导入Oracle表,转为模型加注释
- 【sql】关联查询+表自关联查询
- 第一个AngularJS控制器
热门文章
- 阿里云slb上传证书错误
- [BJWC2011]禁忌 AC 自动机 概率与期望
- d3的一些总结
- HDU-2050 折线分割平面 找规律&;递推
- caioj 1073 动态规划入门(三维一边推:最长公共子序列加强版(三串LCS))
- Linux打包免安装的Qt程序(编写导出依赖包的脚本copylib.sh,程序启动脚本MyApp.sh)
- BZOJ3376: [Usaco2004 Open]Cube Stacking 方块游戏
- ToF相机学习笔记之基本知识
- 在performancepoint里面建立数据源的时候,总是发生以下的报警
- FreeBSD是UNIX系统的重要分支,其命令与Linux大部分通用,少部分是其特有。