HDOJ1171(多重背包)
#include<iostream>
#include<cstdio>
using namespace std;
#define MAX(a,b) (a>b)?a:b
const int SIZE=+;
int nKind; //物品种类数目
int nLimit; //背包容量
int val[SIZE]; //每种背包的价值
int weight[SIZE]; //每种背包的重量
int bag[SIZE]; //每种背包的数目
int dp[SIZE]; //0-1背包, 代价为cost, 获得的价值为value
void ZeroOnePack(int cost, int value)
{
for(int i=nLimit; i>=cost; i--) //逆序
{
dp[i]=MAX(dp[i], dp[i-cost]+value);
}
} //完全背包, 代价为cost, 获得的价值为value
void CompletePack(int cost, int value)
{
for(int i=cost; i<=nLimit; i++) //顺序
{
dp[i]=MAX(dp[i],dp[i-cost]+value);
}
} //多重背包 代价为cost, 获得的价值为value, 该种背包的数目为amount
void MultiplyPack(int cost, int value, int amount)
{
if(cost*amount>=nLimit) CompletePack(cost, value);
else
{
int k=;
while(k<amount)
{
ZeroOnePack(k*cost, k*value);
amount-=k;
k<<=;
} ZeroOnePack(amount*cost, amount*value);
}
}
int main()
{
while(scanf("%d",&nKind)!=EOF&&nKind>)
{
int sum=;
for(int i=;i<nKind;i++)
{
scanf("%d %d",&val[i],&bag[i]);
weight[i]=val[i];
sum+=val[i]*bag[i];
} memset(dp,,sizeof(dp));
nLimit=sum/;
for(int i=;i<nKind;i++)
{
MultiplyPack(weight[i],val[i],bag[i]);
} printf("%d %d\n",sum-dp[nLimit],dp[nLimit]);
}
return ;
}
HDOJ1171(多重背包)的更多相关文章
- hdoj1171 Big Event in HDU(01背包 || 多重背包)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1171 题意 老师有一个属性:价值(value).在学院里的老师共有n种价值,每一种价值value对应着 ...
- 洛谷P1782 旅行商的背包[多重背包]
题目描述 小S坚信任何问题都可以在多项式时间内解决,于是他准备亲自去当一回旅行商.在出发之前,他购进了一些物品.这些物品共有n种,第i种体积为Vi,价值为Wi,共有Di件.他的背包体积是C.怎样装才能 ...
- HDU 2082 找单词 (多重背包)
题意:假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的 ...
- Poj 1276 Cash Machine 多重背包
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 26172 Accepted: 9238 Des ...
- poj 1276 Cash Machine(多重背包)
Cash Machine Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 33444 Accepted: 12106 De ...
- (混合背包 多重背包+完全背包)The Fewest Coins (poj 3260)
http://poj.org/problem?id=3260 Description Farmer John has gone to town to buy some farm supplies. ...
- (多重背包+记录路径)Charlie's Change (poj 1787)
http://poj.org/problem?id=1787 描述 Charlie is a driver of Advanced Cargo Movement, Ltd. Charlie dri ...
- 单调队列优化DP,多重背包
单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn ...
- POJ1742 Coins[多重背包可行性]
Coins Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 34814 Accepted: 11828 Descripti ...
随机推荐
- MAC 脚本批量启动应用
1.touch batchStart.sh 2. #!/bin/bash cd /xxx open 1.app open 2.app 3.chmod +x batchStart.sh 4.ok
- linux c编程:标准IO库
前面介绍对文件进行操作的时候,使用的是open,read,write函数.这一章将要介绍基于流的文件操作方法:fopen,fread,fwrite.这两种方式的区别是什么呢.1种是缓冲文件系统,一种是 ...
- SAP文件夹的判断与创建
[转自 http://blog.csdn.net/saphome/article/details/6956918] SAP文件夹存在的判断与创建 2010-08-29 20:15 相关函数:WS_QU ...
- SMARTFORMS自定义打印格式
[转自 http://lz357502668.blog.163.com/blog/static/16496743201272155135570/] 在sap的打印开发中经常需要自定义纸张,具体步骤如下 ...
- vuex源码 安装依赖问题
今天下载vuex源码时 安装依赖出现以下问题 > chromedriver@2.32.3 install /Users/bao/Desktop/vue-store/vuex/node_modul ...
- awk 运算符(算术运算符,赋值运算符,关系运算符,逻辑运算符,正则运算符)说明
awk作为文本处理优秀工具之一,它有独自丰富的运算符.下面我们一起归纳总结一下,所有运算符. 可以分为:算术运算符,赋值运算符,关系运算符,逻辑预算法,正则运算符. 一.运算符介绍 运算符 描述 赋值 ...
- 帝国cms数据表中文说明
本文介绍下,帝国cms中各数据表的用途,有需要的朋友,参考下吧. 帝国cms各数据表及用途说明. phome_ecms_infoclass_news 新闻采集规则记录表 phome_ecms_info ...
- DatagramSocket总是发送UDP数据后无法接收数据
ref:http://blog.chinaunix.net/uid-20771867-id-3416509.html cmd:telnet localhost 5554 ...
- windows中检查端口占用
在cmd中怎么输入netstat -aon|findstr "9080" 返回: UDP 0.0.0.0:8001 *.* 其中的4220为进城PID
- 怎么在js里写html
<html> <head> <meta charset="utf-8"/> <title>示例前端模板写在代码里</title ...