HDU 2844(多重背包)
来源:互联网 发布:萍乡教育网网络管理 编辑:程序博客网 时间:2024/06/04 18:34
裸的多重背包模板,需要二进制优化才能不超时 0.0
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <map>using namespace std;//#define memset(a,b,sizeof a) cir(a,b)const int maxn = 100000+10;int v[maxn],w[maxn];int n,m;int dp[maxn];void ZeroOnePack(int v,int w){ for(int i=m;i>=w;i--) { dp[i] = max(dp[i],dp[i-v]+v); }}void AllPack(int v,int w){ for(int i=w;i<=m;i++) { dp[i] = max(dp[i],dp[i-v]+v); }}void MultPack(int v,int w,int number){ if(number * w >= m) { AllPack(v,w); } else { int k=1; while(k<=number) { ZeroOnePack(k*v,k*w); number -= k; k *= 2; } ZeroOnePack(number*v,number*v); }}map<int,int> Map;int main(){ while(scanf("%d%d",&n,&m)!=EOF && (n&&m)) { //cir(v,0),cir(w,0);// Map.clear(); memset(v,0,sizeof(v)); memset(w,0,sizeof(w)); memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) { scanf("%d",&v[i]); } for(int i=0;i<n;i++) { scanf("%d",&w[i]); } for(int i=0;i<n;i++) { MultPack(v[i],v[i],w[i]); } int sum = 0; for(int i=1;i<=m;i++) { if(dp[i]>=i) sum++; } cout << sum <<endl; } return 0;}
阅读全文
0 0
- hdu 2844(多重背包)
- HDU 2844(多重背包)
- HDU 2844(多重背包)
- HDU-2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- hdu 2844 多重背包
- HDU 2844 (多重背包)
- hdu 2844(多重背包)
- hdu 2844 多重背包
- HDU 2844 (多重背包)
- hdu 2844(多重背包)
- HDU 2844 Coins(多重背包)
- hdu 2844 Coins (多重背包)
- hdu 2844 Coins(多重背包优化)
- [ACM] hdu 2844 Coins (多重背包)
- 最近计划
- MFC 文本框多行显示
- 【最小费用最大流】BZOJ1070 [SCOI2007]修车
- Hibernate框架
- 视频编解码概述
- HDU 2844(多重背包)
- Java并发编程与技术内幕:Callable、Future、FutureTask、CompletionService
- python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删改查操作
- 10/100M HUB级连线接法
- opencv 图像的读取显示和保存
- STL中的常用容器介绍
- onOptionsItemSelected返回值作用
- JSP JSTL EL 删除空行 <%@ page trimDirectiveWhitespaces="true" %>
- 快速搭建Spring Boot+Spring MVC