一维的01背包问题
来源:互联网 发布:设备管理器端口号 编辑:程序博客网 时间:2024/06/07 18:02
2015年寒假集训第一次周赛的一道题:
Description
Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. Each charm i in the supplied list has a weight Wi (1 ≤ Wi ≤ 400), a 'desirability' factor Di (1 ≤ Di ≤ 100), and can be used at most once. Bessie can only support a charm bracelet whose weight is no more than M (1 ≤ M ≤ 12,880).
Given that weight limit as a constraint and a list of the charms with their weights and desirability rating, deduce the maximum possible sum of ratings.
Input
* Line 1: Two space-separated integers: N and M
* Lines 2..N+1: Line i+1 describes charm i with two space-separated integers: Wi and Di
Output
* Line 1: A single integer that is the greatest sum of charm desirabilities that can be achieved given the weight constraints
Sample Input
4 61 42 63 122 7
Sample Output
23
#include<stdio.h>int max(int a,int b){ return a>b?a:b;}int w[3405],d[3405],sum[13000]; //(当时做错的原因,就是没有理解透sum这个数组是到底是记录啥的,所以数组开的不够大,导致结果是运行错 误!!)int main(){ int n,m,i,j; scanf("%d %d",&n,&m); for(i=0; i<n; i++) scanf("%d %d",&w[i],&d[i]); for(i=0; i<n; i++) //以下三行是一维的01背包问题代码 for(j=m; j>=w[i]; j--) sum[j]=max(sum[j],sum[j-w[i]]+d[i]); //要充分理解这一行代码的意思(放与不放此时包的最大价值) printf("%d\n",sum[m]);}
<span style="font-size:18px;color:#330033;">1、这是一道最基本的01背包问题,运用一维数组会比二维数组在时间复杂度上减少不少。</span>
2、而sum数组就是用来记录当体积取j时这个包内物品最大的价值。
3、所以sum这个数组要根据所允许的最大体积开内存。
- 一维的01背包问题
- 01背包问题的一维数组解法
- 01背包问题一维空间优化的理解
- 01,完全 背包问题的一维数组
- 一维费用的背包问题模板
- 简单01背包问题 一维解决方法
- 01背包问题 一维、二维解法
- 一维数组解决01背包问题
- 背包问题(01背包和完全背包)一维数组实现
- 01背包问题总结一
- 01背包 一维数组写的01背包
- 0-1背包问题的一维数组解法
- 动态规划之背包问题(一):01背包问题
- 01背包一维
- 如何用一维数组来解决01背包和完全背包问题?
- 背包问题-背包01-zb的生日
- DP背包问题小结(01背包,完全背包,需恰好装满或不需,一维DP、二维DP)
- 01背包、完全背包、多重背包问题的C++实现
- android 5.0 编辑彩信时日历和联系人附件不能与其他附件共存
- 在Android4.2中实现bluetooth A2dp Sink(二)——移植Android5.0蓝牙协议栈
- Bluetooth LE(低功耗蓝牙) - 第一部分
- Bluetooth LE(低功耗蓝牙) - 第二部分
- Bluetooth LE(低功耗蓝牙) - 第三部分
- 一维的01背包问题
- JSTL笔记—c标签
- js中 trim()实现
- Bluetooth LE(低功耗蓝牙) - 第四部分
- 《MonkeyRunner原理剖析》第九章-MonkeyImage实现原理 - 概览
- Bluetooth LE(低功耗蓝牙) - 第五部分
- PHP XML操作的各种方法解析(比较详细)
- Bluetooth LE(低功耗蓝牙) - 第六部分(完)
- android 5.0 clone project 的方式