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; }
查看全文
相关阅读:
揭秘 HashMap 实现原理(Java 8)
并发容器之写时拷贝的 List 和 Set
Maven 整合 SSH 框架
Hibernate框架学习之注解配置关系映射
Hibernate框架学习之注解映射实体类
单用户,多设备登录问题
ios scrollview button 延时点击问题
Android 的 AlarmManager 和 wakeLock联合使用
ios bitcode 机制对 dsym 调试文件的影响
信息类型的异步更新方法
原文地址:https://www.cnblogs.com/windmissing/p/2559899.html
最新文章
forms
Django中HtttpRequest请求
Django自定义查询对象
简单的验证码制作
关系映射
LC 676. Implement Magic Dictionary
LC 712. Minimum ASCII Delete Sum for Two Strings
LC 470. Implement Rand10() Using Rand7()
LC 609. Find Duplicate File in System
LC 789. Escape The Ghosts
热门文章
LC 655. Print Binary Tree
885. Spiral Matrix III
LC 968. Binary Tree Cameras
LC 967. Numbers With Same Consecutive Differences
LC 965. Univalued Binary Tree
弄懂 JRE、JDK、JVM 之间的区别与联系
本专题的相关信息说明
基于跳跃表的 ConcurrentSkipListMap 内部实现(Java 8)
为并发而生的 ConcurrentHashMap(Java 8)
本博客申明
Copyright © 2011-2022 走看看