HDU 1114 Piggy-Bank 完全背包问题、

想想我们01背包是逆序遍历是为了保证什么?

保证每件物品只有两种状态,取或者不取.那么正序遍历呢? 这不就正好满足完全背包的条件了吗

means:给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量要求出装满钱罐时的最小价值

 #include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
const int qq=+;
const int MAX=1e8;
int dp[qq];
int v[qq],p[qq];
int main()
{
int t;scanf("%d",&t);
while(t--){
int a,b;scanf("%d%d",&a,&b);
int c=b-a;
int n;scanf("%d",&n);
for(int i=;i<n;++i)
scanf("%d%d",&p[i],&v[i]);
for(int i=;i<=c;++i)
dp[i]=MAX;
dp[]=;
for(int i=;i<n;++i)
for(int j=v[i];j<=c;++j)
dp[j]=min(dp[j],dp[j-v[i]]+p[i]);
if(dp[c]==MAX) printf("This is impossible.\n");
else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[c]);
}
return ;
}

HDU 2191 多重背包问题、

其实还是应用01背包的思想、不过这里有一个小技巧就是二进制表示法、

比如 13、可以表示成 1+2+4+5  这4个数可以组成1到13之间的任意一个数、

那么就可以多重背包拆分成01背包问题、

千万注意将空间压缩成一维的话是逆序遍历、这里解释一下 dp数组中的每一个值都是一种状态,该种状态在当前是独立的不受其他影响的,如果正序遍历的话前面得到的一些状态影响其他状态的生成、

- -、我是这么理解的、  总之你要dp的话就是... 唉本弱弱语文水平好差、

联想一下二维数组下是怎么更新状态的、再看看一维、这样就很容易理解了

 #include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
const int qq=;
int p[qq],v[qq];
int dp[qq];
int main()
{
int t;scanf("%d",&t);
while(t--){
int price,kind;
scanf("%d%d",&price,&kind);
int count=;
int a,b,c;
for(int i=;i<kind;++i){
scanf("%d%d%d",&a,&b,&c);
int t=;
while(c>=t){
p[count]=a*t;
v[count++]=b*t;
c=c-t;
t=t<<;
}
if(c){
p[count]=a*c;
v[count++]=b*c;
}
}
for(int j,i=;i<count;++i)
for(j=price;j>=p[i];--j)
dp[j]=max(dp[j],dp[j-p[i]]+v[i]);
printf("%d\n",dp[price]);
memset(dp,,sizeof(dp)); //一定记得初始化、毕竟有很多组数据、
}
return ;
}

HDU 1114 完全背包 HDU 2191 多重背包的更多相关文章

  1. hdu 2191 (多重背包+二进制优化)

    Problem Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品, ...

  2. HDU 3591 The trouble of Xiaoqian(多重背包+全然背包)

    HDU 3591 The trouble of Xiaoqian(多重背包+全然背包) pid=3591">http://acm.hdu.edu.cn/showproblem.php? ...

  3. hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

    http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...

  4. hdu 2191多重背包

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  5. hdu 6092 Rikka with Subset(多重背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6092 #include <cstdio> #include <iostream> ...

  6. hdoj 2191(多重背包)

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/ ...

  7. hdu 2191 多重背包

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

  8. hdu 2191 (多重背包二进制优化)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 实现代码: #include<bits/stdc++.h> using namespac ...

  9. HDU 1114 Piggy-Bank(动态规划、完全背包)

    Piggy-Bank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

随机推荐

  1. linux下对拍

    #!/bin/bash t=0; while true; do let "t = $t + 1" printf $t printf ":\n" ./rand & ...

  2. python中在计算机视觉中的库及基础用法

    基于python脚本语开发的数字图像处理包有很多,常见的比如PIL.Pillow.opencv.scikit-image等.PIL和pillow只提供了基础的数字图像处理,功能有限:OpenCV实际上 ...

  3. Ajax--serialize应用表单数据序列化

    一.jQuery+Ajax表单数据序列化 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  4. css Position 上下左中右布局

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  5. 全面系统Python3入门+进阶课程

    全面系统Python3入门+进阶课程 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看的时候 ...

  6. vue的table组件

    一个vue-table的组件 说明: 1.基于element-ui开发的vue表格组件. 功能: 1.支持树形数据的展示 2.行拖拽排序 3.单元格拖拽排序 github 使用方法: 1.下载npm包 ...

  7. Junit测试类

    1.当前工程下--右键bulid path add libraries-Junit4 import org.junit.Test;//导入这个类public class TestJunit { pub ...

  8. python 布尔值索引

  9. Leetcode693.Binary Number with Alternating Bits交替位二进制数

    给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等. 示例 1: 输入: 5 输出: True 解释: 5的二进制数是: 101 示例 2: 输入: 7 输出 ...

  10. CentOS 安装svn及配置

    1.环境centos5.5 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svnserve -d -r /www/sv ...