[wikioi]装箱问题
http://wikioi.com/problem/1014/ 01背包问题是最经典的动态规划之一,这道题目甚至是这其中还简单的一种,因为价值就是本身的重量了。本来比如,w是总重量限制,v[]是每个的价值。
但一开始我都有点忘了,查找了一下又勾起了回忆。
1.它把总重量从1到w作为状态,对初学者并不是很直观的。但DP本来就是空间换时间的算法,里面经常以整数做状态,数目还既不是太大又不是太小。最终经常是n^2或n^3的复杂度。
2.01背包问题是个二维数组的DP,状态转移方程式f[i,v]=max(f[i-1,m],f[i-1,m-w[i]]+v[i])。其中f[i,m]表示前i个元素在m是重量限制时的价格最大值。f[i-1,m]表示不选择i的情况,后面是选择i的情况。
3.但注意到f[i-2,m]肯定小于f[i-1,m]所以可以只保留f[m]作为当前m为重量限制时的价格最大值,那么f[m]=max(f[m-w[i]]+v[i],f[m])。化二维为一维。
4.本人的AC程序仍然用了二维数组,下次可以简化。
5.要注意边界条件i<=v,这里最大重量是可以取到的。
可参考:http://www.cnblogs.com/fly1988happy/archive/2011/12/13/2285377.html
#include <iostream>
using namespace std; int mx[31][20005];
int w[31];
int main()
{
int v;
int n;
cin >> v;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> w[i];
}
for (int i = 0; i <= v; i++)
for (int j = 0; j < n; j++)
{
if (j==0)
{
if (w[j] <= i)
mx[j][i] = w[j];
else
mx[j][i] = 0;
}
else
{
if (w[j] > i)
mx[j][i] = mx[j-1][i];
else
{
int v1 = mx[j-1][i]; // not take w[j]
int v2 = mx[j-1][i-w[j]]+w[j];
mx[j][i] = v1 > v2 ? v1 : v2;
}
}
}
cout << (v - mx[n-1][v]);
}
PPT:http://wenku.baidu.com/view/cf389ab069dc5022aaea00c7.html
对于资源类动态规划问题,我们可以看出,问题描述必须有一个基本要素:资源,有时这种资源可能是金钱、空间或者时间,问题就是要对这些资源如何分配,一种基本的想法是将资源应用于前i个阶段,然后考虑第i个阶段和前i-1个阶段之间的关系。
设前i个点的消耗j的资源得到的最优值,研究前i-1个点消耗的资源的最优值,利用第i个点决策转移。
状态转移方程一般可写成: fi(j) = min{ fi-1 ( k) + ui (j,k)}
[wikioi]装箱问题的更多相关文章
- wikioi 1014 装箱问题
来源:http://wikioi.com/problem/1014/ 1014 装箱问题 29人推荐 收藏 发题解 提交代码 报错 题目描写叙述 输入描写叙述 输出描写叙述 例子输入 例子输出 提示 ...
- 【wikioi】1014 装箱问题
题目链接 算法:动态规划(01背包) 01背包思想:依次对待某一物体,考虑是否放入容量为V的背包中 用f[V]来表示容量为V的背包的最大价值,则决策是 f[V] = max{f[V], f[V-v[i ...
- wikioi 1014 装箱问题(背包)
题目描述 Description 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数). 要求n个物品中,任取若 ...
- 【wikioi】1041 Car的旅行路线
题目链接 算法:最短路(数据弱,Floyd也能过) 惨痛的教训:此题我至少提交了20次,原因在于= =太草率和粗心了,看到那个多少组数据以为是城市的数量,导致数组开得小小的= =.(对不起,wikio ...
- 【wikioi】1040 统计单词个数
题目链接 算法:划分型DP PS:被卡过3天.日期:2013-10-10 ~ 2013-10-12 18:52:48 这题是我提交了13次AC= =汗= = 题目描述: 给出一个长度不超过200的由小 ...
- [wikioi 1418]铃仙•优昙华院稻叶(东方幻想乡系列模拟赛)(树上递推)
题目:http://www.wikioi.com/problem/1418/ 分析: 一看就肯定是树上的递推 设f[i][j][k]表示第i秒在k点(从j点走过来的)的概率 则f[i][j][k]=f ...
- [wikioi 1307][poj 2054]欧少堆(乱搞)
题目:http://www.wikioi.com/problem/1307/ 题意:给你一个树,上面有n个节点,每个节点都有一个价值p,求一个n个节点的排列顺序,是的Σi*p[i]最小(要求父节点一定 ...
- [wikioi 1519]过路费(最小生成树+树链剖分)
题目:http://www.wikioi.com/problem/1519/ 题意:给你一个连通的无向图,每条边都有权值,给你若干个询问(x,y),要输出从x到y的路径上边的最大值的最小值 分析:首先 ...
- 【wikioi】1012 最大公约数和最小公倍数问题
题目链接 算法:辗转相除(欧几里得) gcd(a, b)是a和b最小公倍数, lcm(a, b)是a和b的最大公倍数 gcd(a, b) == gcd(b, a%b) 时间复杂度: O(lgb) 具体 ...
随机推荐
- Centos7最小化安装后(minimal)安装图形界面
centos7下载地址:http://mirrors.cqu.edu.cn/CentOS/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso 下载后用vmwa ...
- 【JAVA】浅谈java内部类
一.什么是内部类? 到底什么是内部类呢?通俗的讲,就是在类内部定义的类,包括定义在一个类的方法外面.方法里面或者代码块中. 二.为什么要使用内部类? 为什么我们要不走寻常路,把一个类定义在另一个类的内 ...
- Express安装与调试
Express 是基于Node.Js平台,快速.开放.极简的 web 开发框架. 1.安装 Express的安装通过cmd来进行,过程如下: 首先,先在本地建立一个项目文件夹,取名Nodejs. 然后 ...
- HowTo: SVN undo add without reverting local changes
Reference: http://stackoverflow.com/questions/5083242/undo-svn-add-without-reverting-local-edits svn ...
- ThinkPHP3.2 加载过程(三)
上次回顾: IS_CGI ,IS_WIN,IS_CLI,MAGIC_QUOTES_GPC干嘛用 IS_WIN 看了一下后面的代码 基本上就是为了保证在不同环境下运行时,由于有些操作系统会对文件路径大 ...
- dialog的传值
A页面 等待B页面返回值的textBox:<asp:TextBox ID="TextBox1" runat="server"></asp:Te ...
- Apache服务
Apache服务的安装: Apache服务程序的软件包名称是:httpd 安装方法: rpm软件包安装.源码编译安装.yum安装 yum install httpd 安装完成后启动: revice h ...
- CheckedListBox与下拉框联动代码
private void yewubind(string id) { //给业务类型下拉框绑定业务类型数据 DataTable dtyewu = sb.SelectLast(id, 0); bool ...
- JSP Ajax
html代码: <!DOCTYPE html> <html> <script> function display() { var div=document.getE ...
- asp.net使用MVC4框架基于NPOI做导出数据到Excel表
NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目. 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 ...