poj2392 多重背包
//Accepted 868 KB 188 ms
//多重背包
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <algorithm>
using namespace std;
/**
* This is a documentation comment block
* 如果有一天你坚持不下去了,就想想你为什么走到这儿!
* @authr songt
*/
;
;
int dp[imax_v];
int n;
struct node
{
int weight,c,a;
}f[imax_n];
//按a排序,考虑我们在dp时采用的是倒推,所以我们需要先计算出a较小的时候的情况
int cmp(node x,node y)
{
return x.a<y.a;
}
int max(int a,int b)
{
return a>b?a:b;
}
void zeroOnePack(int weight,int value,int v)
{
for (int j=v;j>=weight;j--)
{
dp[j]=max(dp[j],dp[j-weight]+value);
}
}
void completePack(int weight,int value,int v)
{
for (int j=weight;j<=v;j++)
{
dp[j]=max(dp[j],dp[j-weight]+value);
}
}
void multiplePack(int weight,int value,int amount,int v)
{
;
if (amount*weight>=v)
{
completePack(weight,value,v);
return ;
}
while (k<amount)
{
zeroOnePack(k*weight,k*value,v);
amount-=k;
k<<=;
}
zeroOnePack(amount*weight,amount*value,v);
}
void Dp()
{
memset(dp,,sizeof(dp));
;i<=n;i++)
{
multiplePack(f[i].weight,f[i].weight,f[i].c,f[i].a);
}
;
;i<=;i++)
ans=max(ans,dp[i]);
printf("%d\n",ans);
}
int main()
{
while (scanf("%d",&n)!=EOF)
{
;i<=n;i++)
scanf("%d%d%d",&f[i].weight,&f[i].a,&f[i].c);
sort(f+,f+n+,cmp);
Dp();
}
;
}
poj2392 多重背包的更多相关文章
- poj2392 Space Elevator(多重背包)
http://poj.org/problem?id=2392 题意: 有一群牛要上太空.他们计划建一个太空梯-----用一些石头垒.他们有K种不同类型的石头,每一种石头的高度为h_i,数量为c_i,并 ...
- dp之多重背包poj2392
题意:有k种石头,高为hi,在不超过ai的高度下,这种石头可以放置,有ci种这个石头,求这些石头所能放置的最高高度......... 思路:以往的什么硬币种数,最大硬币数之类的,他们的硬币都已经是排好 ...
- 洛谷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 ...
随机推荐
- android 属性
RelativeLayout 第一类:属性值为true可false android:layout_centerHrizontal 水平居中 android:layout_centerVe ...
- UTF-7编码
目录 1 编码 1 2 编码代码(C++) 2 3 解码代码(C++) 4 4 测试代码(VC++) 7 1 编码 UTF-7编码的规则及特点为: 1)UTF16小于等于 0x ...
- Date的那一大堆事儿--1
String perfTimeStr = "";// 统一设置日历格式 Calendar calendar = Calendar.getInstance(); calendar.s ...
- bootstrap--双日历插件
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- linux服务器挂载第二块磁盘图文解说
文章来源:http://www.cndns.com/help/help_con.aspx?hid=394 Linux磁盘挂载是比较常见的管理操作之一.我司橙云预装的linux系统有2块盘,一块为系统盘 ...
- jQuery图表开源软件
jQuery图表插件 jQchart jQchart 是一个jQuery的插件,用来绘制图表的.支持各种形状的图表. 示例代码: == Mini sample == $('#canvasMyID'). ...
- 读书笔记3 Socket
Socket被称为网络插座.用于两个网络应用程序之间的通信. 通信地址:URI 通过协议,地址,端口号可以确定网络上的一个程序.地址和端口号组合称之为端点. 通常会有发信人通信地址,收信人通信地址这两 ...
- ABAP-smartform-一页3列的条码打印
1.自建barcode: se73->System bar code->change->create->new input the name of the bar code y ...
- boxplot
x1 = rand(20,6); x2 = .5+rand(20,6); x3 = randn(20,6); x = [x1;x2;x3]; x = x(:); g1 = [ones(size(x1) ...
- MySql中添加用户/删除用户
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 ...