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; }
查看全文
相关阅读:
鬼斧神工---计算机的开机启动过程
微服务之日志落盘设计
微服务架构设计
一条SQL语句执行得很慢的原因有哪些?
996:只要能活着就好,不管活得多么糟糕
事务隔离性与隔离级别
数据库悲观锁与乐观锁
解决百度网盘(百度云)分享链接不存在失效、分享的文件已经被取消的问题
宁撞金钟一下,不打破鼓三千,IT人要有志气,要进就进大的好的公司
1430:家庭作业
原文地址:https://www.cnblogs.com/windmissing/p/2559899.html
最新文章
洛谷 P2388 阶乘之乘 题解
[JZOJ5233] 【GDOI模拟8.5】概率博弈
JZOJ[3771] 【NOI2015模拟8.15】小 Z 的烦恼
支配树学习
[violet6] 故乡的梦
[JZOJ5355] 【NOIP2017提高A组模拟9.9】保命
[JZOJ4763] 【NOIP2016提高A组模拟9.7】旷野大计算
[JZOJ2701] 【GDKOI2012模拟02.01】矩阵
[JZOJ2702] 【GDKOI2012模拟02.01】探险
[JZOJ2700] 【GDKOI2012模拟02.01】数字
热门文章
[JZOJ5977] 【清华2019冬令营模拟12.15】堆
hdu 1051 wooden sticks (贪心+巧妙转化)
素数筛法
求线段上格点的个数
辗转相除法求最大公约数
POJ 3723 征兵问题(最小生成树算法的应用)
最小生成树问题:kruskal算法
POJ 1182食物链(并查集)
并查集的实现
poj 1017 装箱子(模拟+贪心)
Copyright © 2011-2022 走看看