题目链接:poj 3624

这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。
            用子问题定义状态:即F [i, v]表示前i件物品恰放入一个容量为v 的背包可以
            获得的最大价值。则其状态转移方程便是:
            F [i, v] = max{F [i − 1, v], F [i − 1, v − Ci ] + Wi }
            这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生
            出来的。所以有必要将它详细解释一下:“将前i件物品放入容量为v 的背包

中”这个子问题,若只考虑第i件物品的策略(放或不放),那么就可以转化
            为一个只和前i − 1件物品相关的问题。如果不放第i件物品,那么问题就转化
            为“前i − 1件物品放入容量为v 的背包中”,价值为F [i − 1, v];如果放第i件物
            品,那么问题就转化为“前i − 1件物品放入剩下的容量为v − Ci 的背包中”,
            此时能获得的最大价值就是F [i − 1, v − Ci ]再加上通过放入第i件物品获得的价
            值 Wi 。
            伪代码如下:
            F [0, 0..V ] = 0
            for i = 1 to N
                  for v = Ci to V
                        F [i, v] = max{F [i − 1, v], F [i − 1, v − Ci ] + Wi }

以上方法的时间和空间复杂度均为O(V N ),其中时间复杂度应该已经不能
            再优化了,但空间复杂度却可以优化到O(V )。
            先考虑上面讲的基本思路如何实现,肯定是有一个主循环i = 1..N ,每次
            算出来二维数组F [i, 0..V ]的所有值。那么,如果只用一个数组F [0..V ],能不
            能保证第i次循环结束后F [v]中表示的就是我们定义的状态F [i, v]呢?F [i, v]是
            由F [i − 1, v]和F [i − 1, v − Ci ]两个子问题递推而来,能否保证在推F [i, v]时(也
            即在第i次主循环中推F [v]时)能够取用F [i − 1, v]和F [i − 1, v − Ci ]的值呢?事
            实上,这要求在每次主循环中我们以v = V..0的递减顺序计算F [v],这样才能保
            证推F [v]时F [v − Ci ]保存的是状态F [i − 1, v − Ci] 的值。伪代码如下:
            F [0..V ] = 0
            for i = 1 to N
                  for v = V to Ci
                       F [v] = max{F [v], F [v − Ci ] + Wi }
            其中的F [v] = max{F [v], F [v − Ci ] + Wi }一句,恰就对应于我们原来的转移方
            程,因为现在的F [v − Ci ]就相当于原来的F [i − 1, v − Ci ]。如果将v 的循环顺序
            从上面的逆序改成顺序的话,那么则成了F [i, v]由F [i, v − Ci ]推导得到,与本题
            意不符。
            代码:

#include<stdio.h>
#include<iostream>
#include<string.h>
#define N 3405
using namespace std;
int bag[12900];
int w[N],d[N];
int main(void)
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>w[i]>>d[i];
memset(bag,0,sizeof(bag));
for(int i=1;i<=n;i++)
for(int k=m;k>=w[i];k--)
{
if(bag[k-w[i]] + d[i] > bag[k])
bag[k] = bag[k - w[i]] + d[i];
}
cout<<bag[m]<<endl;
return 0;
}

poj 3624 Charm Bracelet 01背包问题的更多相关文章

  1. POJ 3624 Charm Bracelet(01背包裸题)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 38909   Accepted: 16862 ...

  2. POJ 3624 Charm Bracelet(01背包)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34532   Accepted: 15301 ...

  3. POJ 3624 Charm Bracelet(01背包模板题)

    题目链接 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 52318   Accepted: 21912 Descriptio ...

  4. POJ 3624 Charm Bracelet 0-1背包

    传送门:http://poj.org/problem?id=3624 题目大意:XXX去珠宝店,她需要N件首饰,能带的首饰总重量不超过M,要求不超过M的情况下,使首饰的魔力值(D)最大. 0-1背包入 ...

  5. POJ.3624 Charm Bracelet(DP 01背包)

    POJ.3624 Charm Bracelet(DP 01背包) 题意分析 裸01背包 代码总览 #include <iostream> #include <cstdio> # ...

  6. POJ 3624 Charm Bracelet (01背包)

    题目链接:http://poj.org/problem?id=3624 Bessie has gone to the mall's jewelry store and spies a charm br ...

  7. POJ 3624 Charm Bracelet(01背包模板)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45191   Accepted: 19318 ...

  8. poj 3624 Charm Bracelet(01背包)

    Charm Bracelet Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29295   Accepted: 13143 ...

  9. [再做01背包] POJ 3624 Charm Bracelet

    接触动态规划的第一题是数塔问题,第二题就是01背包问题了. 当时看的懵懵懂懂,回过头来再看这道题还是非常简单的了. 用 dp[i][j] 表示取前i种物品,使它们总体积不超过j的最优取法取得的价值总和 ...

随机推荐

  1. objective -c こだわり

    You make an object by creating an instance of a particular class. You do this by allocating the obje ...

  2. 记一次C++与lua连接

    今晚,花了两个多钟折腾lua和c++的互连,终于成功了,觉得有必要记录下来.说实话,搜索引擎真是有利有弊,利在你有地方搜答案,弊则在于你半天都找不到正确的答案甚至找到误导你的答案,今晚更加加深了我的体 ...

  3. 2 kNN-K-Nearest Neighbors algorithm k邻近算法(二)

    2.3 示例:手写识别系统 2.3 .1 准备数据:将图像转换为测试向量 训练样本:trainingDigits 2000个例子,每个数字大约200个样本 测试数据:testDigits 大约900个 ...

  4. Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用

    转自:http://fineqtbull.iteye.com/blog/477994#bc2364938 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的使用方法和 ...

  5. arcEngine添加标注(上)

    arcEngine添加标注有3个技术点:1,获得图层的属性字段:2,初始化符号显示控件:3,添加标注. 获得图层的属性字段:   //每个图层都是一个表的图形化显示,ILayer跟ITale可以互相转 ...

  6. POJ1185 炮兵阵地 状态压缩

    因为不知道不同的博客怎么转,就把别人的复制过来了,这个题解写的非常好,原地址为: http://hi.baidu.com/wangxustf/item/9138f80ce2292b8903ce1bc7 ...

  7. poj1799---解析几何

    sin(a)=r/R-r,反三角asin(r/R-r),乘以2n=2pi,去化简,得到r 收获:define pi acos(-1) 这样pi的精度会高很多<math.h>(cos,sin ...

  8. 前端新人学习笔记-------html/css/js基础知识点

    即将毕业的软件工程大学生一枚,秋季招聘应聘的是Android,今年来到公司实习,要求做前端开发,所以一切只有现学,现在根据视频来学习,然后开这个博客记录一下自己的学习过程,废话不多说,开写. 4月6日 ...

  9. Git上手指南

    (写在最前:这篇随笔是我在学习git时参考资料+实践出来的,其中一些问题是在实践中遇到的,希望对大家有帮助,还有很多不完整的地方.如果有什么错误的地方欢迎随时向我提出来) 在Git教程之前,我们先来了 ...

  10. <a>元素生成多个<a>的问题,元素标签结尾影响

    告诉我不是真的吧,<a/>和<a></a>真的有区别...