杭电2844
2016-05-25 20:39
183 查看
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int n,m; int w[110],v[110]; int sum[110]; int capacity; int dp[100010]; void CompletePack(int j) { int i; for(i=w[j];i<=capacity;i++) { dp[i]=max(dp[i-w[j]]+v[j],dp[i]); } } void ZeroOnePack(int i,int j) { int W=j*w[i]; int V=j*v[i]; for(i=capacity;i>=W;i--) dp[i]=max(dp[i-W]+V,dp[i]); } void ManyPack() { int i,j; for(i=0;i<n;i++) { if(w[i]*sum[i]>=capacity) { CompletePack(i); } else { for(j=1;j<sum[i];j*=2) { ZeroOnePack(i,j); sum[i]-=j; } ZeroOnePack(i,sum[i]); } } } int main() { int i,num; while(~scanf("%d%d",&n,&m)&&(n||m)) { num=0; for(i=0;i<n;i++) { scanf("%d",&v[i]); w[i]=v[i]; } for(i=0;i<n;i++) { scanf("%d",&sum[i]); } memset(dp,0,sizeof(dp)); capacity=m; ManyPack(); for(i=1;i<=m;i++) { if(dp[i]==i) { num++; } } printf("%d\n",num); } return 0; }
相关文章推荐
- 多点触控
- C++第六次作业
- 数据仓库---企业信息工厂(EIF)
- Activity四种启动模式(standard,singleTop,singleTask,singleInstance)
- LeetCode题解——Palindrome Pairs
- 利用事件的冒泡特性,为子标签添加Onclick事件
- STM32F4手动调整时钟
- shell之用while从文件中读取数据
- 第13周-项目1-分数类中的运算符重载(2)
- Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK黑屏问题
- Shell排序
- SGU 294 He's Circles
- 【转】jvm 内存模型及内存调优
- tomcat启动在80端口
- BZOJ2822 [AHOI2012]树屋阶梯
- android stuio中布局预览错误解决方法
- htc vive安装到玩流程体验
- opencv错误记录(1)计算机中丢失opencv_highgui249d.dll的解决方法
- HDU 1257 最少拦截系统(最长上升子序列)
- 【CodeForces】651B - Beautiful Paintings(暴力)