POJ 3624 Charm Bracelet
DP 一直是心中痛,不多说了,这个暑假就坑在这上了。
这暑假第一道DP题,01背包问题。
题意是说物品有 重量和价值 ,但你能承受的重量有限,问你能带的最大价值。
这题数组开大点,尽管不知道有啥坑点,可是我数组开得大,直接1A了。
想想自己DP都是大问题,还要给学弟讲(tiao)题(jiao),真是忧伤。
仅仅能这几天通宵点出 DP 天赋。顺便贴上自己的理解,反正我也准备这样给学弟讲,假设有误,请路过大神指正。
论01背包的自我修养:
N个物品,M容量的包,最大价值为W。
第 i 件物品分别有 Vi 的重量和 Ci 的价值。
N = 4 ,M= 6 。
V C
1: 1 4
2: 2 6
3: 3 12
4: 2 7
int dp[10001],c[10001],v[10001];
//分别为背包的价值,物品的价值,物品重量。
memset(dp,0,sizeof(dp));
//初始化背包 毕竟没放东西的时候是没有价值的
//还有其它初始化为-INF 的情况,仅仅有dp[0]=0。这是要求:恰好装满的最大价值。
for ( int i = 0 ; i < n ; i++)
{
//从第一件物品開始放
for ( int j = m ; j-v [i] >= 0 ; j--) // j - v[i] >=0防止数组越界,毕竟背包容量不能为负
{
//背包每次减去1,看能不能放进去这件物品
//printf("%d:max(%d,%d) ",j,dp[j],dp[j-c[i]]+v[i]);
dp[j] = max ( dp[j] , dp[ j-v[i] ] + c[i] );
//当背包容量为j的时候,能放进去添加价值,就放进去
//dp[j] 容量为j的时候的价值
//dp[ j-c[i] ] + c [i] (容量j减去当前物品的重量=剩余容量) 的价值 + 当前物品的价值
//价值当然越大越好 取max
//当 j - v[i] < 0表明背包已经不能放了。
}
}
容量:max(前一个价值,放入当前物品后的价值)
6 :max(0,4) 5 :max(0,4) 4 :max(0,4) 3 :max(0,4) 2 :max(0,4) 1 :max(0,4)
6 :max(4,10) 5 :max(4,10) 4 :max(4,10) 3 :max(4,10) 2 :max(4,6)
6 :max(10,22) 5 :max(10,18) 4 :max(10,16) 3 :max(10,12)
6 :max(22,23) 5 :max(18,19) 4 :max(16,13) 3 :max(12,11) 2 :max(6,7)
最后背包 从容量 0 ~ 6 所能有的价值,取其最大值。
M:W 0 1 2 3 4 5 6
0:0 1:4 2:7 3:12 4:16 5:19 6:23
这时候背包装满的情况 价值W最大,为23。
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<iostream>
#include<list>
#include<set>
#include<cmath>
#define INF 0x7fffffff
#define eps 1e-6
using namespace std;
int dp[1000001];
int c[100001],v[100001];
int n,m;int main()
{while(scanf("%d%d",&n,&m)!=EOF){for(int i=0;i<n;i++)scanf("%d%d",&c[i],&v[i]);memset(dp,0,sizeof(dp));for(int i=0;i<n;i++){for(int j=m;j-c[i]>=0;j--){dp[j]=max(dp[j],dp[j-c[i]]+v[i]);}}int ans=0;for(int i=0;i<=m;i++)ans=max(ans,dp[i]);printf("%d\n",ans);}
}
POJ 3624 Charm Bracelet相关推荐
- POJ 3624 Charm Bracelet 0-1背包
传送门:http://poj.org/problem?id=3624 题目大意:XXX去珠宝店,她需要N件首饰,能带的首饰总重量不超过M,要求不超过M的情况下,使首饰的魔力值(D)最大. 0-1背包入 ...
- POJ - 3624 Charm Bracelet
题目链接:http://poj.org/problem?id=3624 题意:一共给出n种手镯,每个手镯有着各自的重量以及魅力值,在m重量下能得到的最大魅力值是多少. 分析:标准的01背包.状态转移如 ...
- poj 3624 Charm Bracelet (01背包)
题目链接:http://poj.org/problem?id=3624 //典型01背包问题 //状态转移方程dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+d[i]) ...
- POJ 3624 Charm Bracelet(01背包 基础)
题意: n个装饰品 容量m的背包 每个装饰品 重wi 价值 di 求能装的最大价值 思路:基础01背包 #include<stdio.h> #include<string.h> ...
- 【POJ - 3624 】Charm Bracelet (dp,0-1背包裸题)
题干: Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to ...
- 我花了三个小时写了一道题的六千字题解....(POJ 2888 Magic Bracelet)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 前置知识:小学生都能看懂的群论从入门到升天教程 <群论全家桶> 一道简单的题目 Probl ...
- AC日记——[USACO07DEC]手链Charm Bracelet 洛谷 P2871
题目描述 Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like t ...
- Charm Bracelet(0-1)
Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fil ...
- Charm Bracelet
Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fil ...
最新文章
- unigui的页面布局使用
- npm i和npm_让您的NPM套件包含Jest和Codecov☂️
- “傻子”阿甘的大智慧
- x5内核有什么优点_欧尚X5国产又一黑马SUV,颜值高性能强,顶配仅需10万左右
- win7下不能使用dnw烧写的解决办法——韦东山嵌入式Linux学习笔记05
- GFS分布式文件系统简介及部署——让存储变得更高级
- MMKV集成与原理,先收藏了
- 找一个程序员当男朋友是什么样的体验?
- Cisco IOS Unicast NAT 工作原理 [一]
- ExtJS,JQuery,Dojo的小比较
- Forward Plus Rendering
- java堆内存_java堆内存模型
- 一个非常经典的erp教程
- 人工智能白皮书(2022年)
- TheFatRat免杀
- 医学计算机思维培养方式的研究,计算机教学中的科研思维培养
- python locust学习笔记
- 中序遍历二叉树非递归
- Session.AUTO_ACKNOWLEDGE
- [wayfarer]PetShop数据访问层之数据库访问设计