runxinzhi.com
首页
百度搜索
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; }
相关阅读:
商城项目开发(一)
java基础
SpringBoot笔记
设计模式-创建型模式
讲真的 曾惜
Linux常用精简命令实训练习
使用ZeroClipboard.js复制内容到剪贴板上
浅谈Jquery中的bind(),live(),delegate(),on()绑定事件方式
jQuery mouseover与mouseenter,mouseout与mouseleave的区别
div中的img垂直居中
原文地址:https://www.cnblogs.com/windmissing/p/2559899.html
最新文章
AndroidStudio java类文件左下角出现红色的J标识,解决方法
基于mxgraph.js开发的流程图组件
Javadoc文档生成工具-自定义版
el-tree点击获取直接父级的属性
JavaFx之不通过全局静态变量进行窗体通信
ELement-UI之树形表格(treeTable&&treeGrid)
Vue与Element走过的坑。。。。带上Axios
创建以mybatis为基础的web项目(2)mabitis中的一对一关系项目实战
mybatis的mapper接口代理使用的三个规范
1.源码解析之Object类
热门文章
4.什么是方法?
2.联系-----for循环和while循环
2.switch的使用
1.联系-----条件结构与三目运算符的关系
1.myeclipse之单元测试Junit
1.bootstrap的插件相关(上传文件、Markdown、日期)
Tasty项目经验总结(不断补充中)
2.javascript之缓存 localStorage 和sessionStorage之间的区别
1.jsp 从当前页面跳转到另一页面 (含有使用JavaScript、servlet 的跳转页面的方法)
当阳光照在海面上,当朦胧月色洒在泉水上---我在想你
Copyright © 2020-2023
润新知