zoukankan
html css js c++ java
hdu1114 PiggyBank 完全背包
/*设d[k]是重量为k时所对应的最小价值,重量不可能凑成k时,置其为-1,表示无穷大
状态转移方程:
dp[k] = 0…………k = 0;
dp[k] = min(value[j] + dp[k - weight[j]])…………k >= weight[j];
其中,1=< j <= n,若dp[k - weight[j]]) = -1,表示它是无穷大,重量不能达到
本题求的是最小,模板需要做一些细微的改动
/*完全背包 有N种物品和一个容量为V的背包,每种物品都有无限件可用。 第i种物品的费用是c[i],价值是w[i]。 令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值 f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k*c[i]<=v} 优化:f[i][v]=max{f[i-1][v],f[i][v-c[i]]+w[i]}*/ void CompletePack(int cost, int value) { int v; for( v = cost; v <= V; v++) { if(dp[v-cost] == -1)continue; if(dp[v] == -1)dp[v] = dp[v-cost]+value; else dp[v] = min( dp[v], dp[v-cost]+value); } }
本题的程序:
#include "Bag.h" #include <iostream> using namespace std; int main() { int t, e, f, i; cin>>t; while (t--) { cin>>e>>f>>N; V = f - e; for (i = 0; i < N; i++) cin>>v[i]>>c[i]; memset(dp, -1, sizeof(dp)); dp[0] = 0; for(i = 0; i < N; i++) CompletePack(c[i], v[i]); if (dp[V] == -1) cout << "This is impossible.\n"; else cout << "The minimum amount of money in the piggy-bank is " << dp[V] << ".\n"; } return 0; }
查看全文
相关阅读:
JavaScript周报#185
让你跟上nodejs的资源
微信服务号开发笔记
Algs4-2.1.15昂贵的交换
Algs4-2.1.14出列排序
Algs4-2.1.13纸牌排序-按花色排序
Algs4-2.1.12令希尔排序打印出递增序列的每个元素所带来的比较次数和数组大小的比值
Algs4-2.1.10在希尔排序中为什么实现h有序时不使用选择排序?
Algs4-2.1.11希尔排序序列改为存数组
Algs4-2.1.9给出希尔排序的轨迹
原文地址:https://www.cnblogs.com/windmissing/p/2559899.html
最新文章
快速获取centos主机ip
理解数学公式与numpy矩阵运算
矢量化编程的简单记录
矩阵的三个重要用途
pandas、matplotlib、Numpy模块的简单学习
包、time、datetime、hashlib和hmac、request、re
模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途
day14作业
匿名函数、内置函数、面向过程编程
三元表达式、列表推导式、字典生成式、生成器、递归
热门文章
闭包函数和装饰器
可变长参数、函数的嵌套、名称空间和作用域学习笔记
day10作业
足球术语
Designers, please follow the guidelines
13 Reasons Why You Should Pay Attention to Mobile Web Performance
藏地传奇真言专题简单小结
Javascript周报#182
JavaScript周报#183
JavaScript周报#184
Copyright © 2011-2022 走看看