在容量为m的背包里,问有多少种不超过m的装包方式(多重背包+枚举统计)
来源:互联网 发布:alexa mini软件 编辑:程序博客网 时间:2024/04/30 00:26
多组输入。
对于每组数据,第一行为两个整数n,m(1 <= n <= 100,1 <= m <= 100000) 。
接下来的一行有n个整数Ai,n个整数Ci(1 <= Ai <= 10000,1 <= Ci <= 1000) 。
文件的最后一行为两个0,代表输入结束。
输出
对于每组数据,输出一行,包含一个整数代表答案。
3 101 2 42 1 12 5 1 42 10 0
示例输出
84
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#define LL long long#define esp 1e9using namespace std;int s[100010],nu[100010];int dp[100010];int m;void com(int sp,int c){ for(int i=sp;i<=m;i++) { dp[i]=max(dp[i],dp[i-sp]+c); }}void on(int sp,int c){ for(int i=m;i>=sp;i--) { dp[i]=max(dp[i],dp[i-sp]+c); }}void muli(int num,int sp,int c){ if(sp*num>=m) { com(sp,c); return; } int tem=1; while(tem<=num) { on(tem*c,tem*sp); num-=tem; tem<<=1; } on(num*c,num*sp);}int main(){ int n,i,j,k; while(~scanf("%d%d",&n,&m)&&n&&m) { memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) scanf("%d",&s[i]); for(i=0;i<n;i++) scanf("%d",&nu[i]); for(i=0;i<n;i++) { muli(nu[i],s[i],s[i]); } int ans=0; for(i=1;i<=m;i++) if(dp[i]==i) ans++; printf("%d\n",ans); } return 0;}
0 0
- 在容量为m的背包里,问有多少种不超过m的装包方式(多重背包+枚举统计)
- poj 1742 coins 多重背包,只是用来标记可以组成多少个小于m的值
- 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10);如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使
- 设m.n均为自然数,m可表示为一些不超过n的自然数之和,f(m,n)为这种表示方式的数目。
- 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
- 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?
- 多重背包 (n种物品,每种m个)
- m表示为一些不超过n的自然数之和
- m表示为一些不超过n的自然数之和
- 动态规划_ 选出一些数相加,问最后是m的倍数的方案有多少种
- poj 1028 Ignatius and the Princess III 等于价值为M的有多少种情况
- ZOJ 1569 对于给定序列,问有多少子序列的和是m倍数
- 把m升水倒入n个桶中,可以有桶为空,问有多少种倒法
- 多重背包转化为01背包的方法与思路
- poj1276 多重背包问题 转换为经典的01背包
- 给定N中物品和一个背包。物品i的重量是Wi,其价值位Vi ,背包的容量为C。问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大?对每种物品i只有两种选择,即装入背包和不装入背包
- dp -- 多重背包 [POJ-1276] 重量等于体积且背包容量较大时的算法
- 给你m个东西,放在n个相同的盒子中(相同,即不计顺序),每个盒子可以放任意多,问有多少种放法
- 杭电1128
- Android笔记 Activity&Intent
- C++中#ifdef#endif
- lintcode-三数之和-57
- 36. PHP面向对象
- 在容量为m的背包里,问有多少种不超过m的装包方式(多重背包+枚举统计)
- iOS中的SQLLite
- 虚函数
- Excel合并单元格相关代码
- hdu 5438 Ponds(拓扑排序+并查集)
- 必要紧张不要怀疑自己
- Win32 绘图基础 -- 绘制直线、边框、贝塞尔曲线、填充、裁剪
- 链表的基本操作的实现---- 增删改查
- 第三天 音乐播放器