完全背包问题:湫湫系列故事――减肥记I(HDU 4508)
湫湫系列故事――减肥记I HDU 4508
一道裸的完全背包
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
int c[],a[],b[];
int main()
{
int n,i,j,m;
while(scanf("%d",&n)!=EOF)
{
for(i=;i<n;i++)
scanf("%d%d",&a[i],&b[i]);
scanf("%d",&m);
memset(c,,sizeof(c));
for(i=;i<n;i++)
for(j=b[i];j<=m;j++)
if(c[j]<c[j-b[i]]+a[i])
c[j]=c[j-b[i]]+a[i];
printf("%d\n",c[m]);
}
return ;
}
下面是没有二进制优化的算法:
思路:
这个问题非常类似于01背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……直至取⌊V/Ci⌋件等许多种。
如果仍然按照解01背包时的思路,令F[i,v]表示前i种物品恰放入一个容量为v的背包的最大权值。仍然可以按照每种物品不同的策略写出状态转移方程,像这样:
F[i,v]=max{F[i−1,v−kCi]+kWi|0≤kCi≤v}
这跟01背包问题一样有O(VN)个状态需要求解,但求解每个状态的时间已经不
是常数了,求解状态F[i,v]的时间是O(vCi),总的复杂度可以认为是O(NVΣVCi),是比较大的。
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
int c[],a[],b[];
int main()
{
int n,i,j,k,m;
while(scanf("%d",&n)!=EOF)
{
for(i=;i<n;i++)
scanf("%d%d",&a[i],&b[i]);
scanf("%d",&m);
memset(c,,sizeof(c));
for(i=;i<n;i++)
for(k=0;k<=m/b[i];k++)//数量
for(j=m;j>=k*b[i];j--)
c[j]=max(c[j],c[j-k*b[i]]+k*a[i]);
printf("%d\n",c[m]);
}
return ;
}
完全背包问题:湫湫系列故事――减肥记I(HDU 4508)的更多相关文章
- HDU 4508 湫湫系列故事——减肥记I(全然背包)
HDU 4508 湫湫系列故事--减肥记I(全然背包) http://acm.hdu.edu.cn/showproblem.php?pid=4508 题意: 有n种食物, 每种食物吃了能获得val[i ...
- hdu4508 完全背包,湫湫系列故事——减肥记I
湫湫系列故事——减肥记I 对于01背包和完全背包,昨晚快睡着的时候,突然就来了灵感 区别:dp[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值 在第二重循环,01 是倒着循环的,因 ...
- HDUOJ----4509湫湫系列故事——减肥记II
湫湫系列故事——减肥记II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- HDUOJ----湫湫系列故事——减肥记I
湫湫系列故事——减肥记I Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- HDOJ(HDU).4508 湫湫系列故事――减肥记I (DP 完全背包)
HDOJ(HDU).4508 湫湫系列故事――减肥记I (DP 完全背包) 题意分析 裸完全背包 代码总览 #include <iostream> #include <cstdio& ...
- G - 湫湫系列故事——减肥记I
G - 湫湫系列故事——减肥记I Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u De ...
- M - 湫湫系列故事——减肥记I
M - 湫湫系列故事--减肥记I 对于吃货来说,过年最幸福的事就是吃了,没有之一! 但是对于女生来说,卡路里(热量)是天敌啊! 资深美女湫湫深谙"胖来如山倒,胖去如抽丝"的道理,所 ...
- 2013腾讯编程马拉松初赛第一场(3月21日) 湫湫系列故事——减肥记II ----线段树
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4509 虽然制定了减肥食谱,但是湫湫显然克制不住吃货的本能,根本没有按照食谱行动! 于是,结果显而易见… 但 ...
- Hdoj 4508.湫湫系列故事——减肥记I 题解
Problem Description 对于吃货来说,过年最幸福的事就是吃了,没有之一! 但是对于女生来说,卡路里(热量)是天敌啊! 资深美女湫湫深谙"胖来如山倒,胖去如抽丝"的道 ...
随机推荐
- 洛谷P3367 【模板】并查集
P3367 [模板]并查集 293通过 551提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 不知道哪错了 为啥通不过最后三个节点 题解 不懂为什么MLE 最后一个数 ...
- AngularJs 入门系列-2 表单验证
对于日常的开发来说,最常见的开发场景就是通过表单编辑数据,这里涉及的问题就是验证问题. angularjs 内置已经支持了常见的验证方式,可以轻松实现表单验证. 1. 绑定 为了方便,我们在 $sco ...
- Mysql 与日期和时间相关的函数
目录: 常用日期函数 时间加减函数 date_forma函数 1. 常用日期函数 now() current_timestamp() sysdate() 实例一: 从上图可以看出三个函数都是用来获取当 ...
- Object转bigdecimal
/*由数字字符串构造BigDecimal的方法 *设置BigDecimal的小数位数的方法 */ import java.math.BigDecimal; //数字字符串 String StrBd=& ...
- [python] python 中的" "和' '都是完全转义
dict = {"a" : "apple", "b" : "banana", "g" : " ...
- Java 在某一个时间点定时执行任务(转载)
java定时任务,每天定时执行任务.以下是这个例子的全部代码. public class TimerManager { //时间间隔 private static final long PERIOD_ ...
- 深刻理解和运用XMLHttpRequest
本文为转载文章,因见猎心喜,担心失传,故贴此以备不时之需. 原文地址:传送 你真的会使用XMLHttpRequest吗? xmlhttprequest http cors ajax ruoyiqing ...
- hdu 4006 The kth great number (优先队列)
/********************************************************** 题目: The kth great number(HDU 4006) 链接: h ...
- 重签名问题:does not have a signature matching
今天在家里电脑重签名过的apk拿到公司来用装到模拟器上,运行Robotium测试用例时,报了如下错误,原本以为是工程里的activity名称和包名写错了呢,检查了一遍发现木有错误呀.... 好吧,那我 ...
- Oracle中Lpad函数和Rpad函数的用法
http://blog.csdn.net/woshixuye/article/details/17262307 一.Lpad函数 lpad函数将左边的字符串填充一些特定的字符其语法格式如下:lpad ...