动态规划—Problem R
来源:互联网 发布:无主之地2画质优化 编辑:程序博客网 时间:2024/06/06 10:52
动态规划—Problem R
题意
题意:给出小猪钱罐的重量和装满钱后的重量,然后是几组数据,每组数据包括每种钱币的价值与重量。要求出重量最少能装满钱罐时的最大价值。
解题思路
完全背包问题。关于完全背包嘛,即在01背包的基础上,每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。如果仍然按照解01背包时的思路,令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值。
状态转移方程为:
dp[j] = min(dp[j],dp[j-wei[i]]+val[i]).
最后,如果动规数组最后一格数据不等于初始值,即为答案。
感想
最近上课听的有些懵逼,呵呵,完全背包,还需再加深认识与理解。
AC代码
#include <iostream>#include <algorithm>#include <cstring>using namespace std;int dp[1000005];int main(){ int t; int wa,wb,w; int n,val[505],wei[505],i,j; cin>>t; while(t--) { cin>>wa>>wb; w = wb-wa;//必须减去小猪本身重量 cin>>n; for(i = 0;i<n;i++) cin>>val[i]>>wei[i]; for(i = 0;i<=w;i++) { dp[i] = 10000000;//因为要求小的,所以dp数组必须存大数 } dp[0] = 0; for(i = 0;i<n;i++) { for(j = wei[i];j<=w;j++) { dp[j] = min(dp[j],dp[j-wei[i]]+val[i]); } } if(dp[w] == 10000000) printf("This is impossible.\n"); else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[w]); } return 0;}
0 0
- 动态规划—Problem R
- DP 动态规划 Problem R 1018 完全背包
- 动态规划—Problem A
- 动态规划—Problem B
- 动态规划—Problem F
- 动态规划—Problem M
- 动态规划—Problem J
- 动态规划—Problem L
- 动态规划—Problem K
- 动态规划—Problem N
- 动态规划—Problem O
- 动态规划—Problem E
- 动态规划—Problem D
- 动态规划—Problem C
- 动态规划—Problem P
- 动态规划—Problem Q
- 动态规划—Problem H
- 动态规划—Problem G
- 15类 Android 通用流行框架大全
- 实时显示今年还剩下几天几时几分几秒(js,练习Date的方法)
- ImageLoader
- Oracle Function详解
- Unity_2016/5/30
- 动态规划—Problem R
- 如何制作python的安装模块
- AndroidStudio找不到USB
- Java发送邮件服务
- 底层实现-intset 整数集合
- Dvm的进程和Linux的进程
- TimLiu-iOS
- 思考--测试应该从代码中读懂什么
- 百度地图的使用(定位)