Charm Bracelet
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 22621   Accepted: 10157

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 weightWi (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 6
1 4
2 6
3 12
2 7

Sample Output

23

题意:给定物品数量n和背包容量m,n个物品的重量weight和价值val,求能获得的最大价值。

题解:状态转移方程:dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i]);当中状态dp[i][j]表示前i个物品放在容量为j的背包中能获得的最大价值。

二维数组能够压缩成一维以节省空间,可是内层循环须要倒序。

原始版本号:耗时360ms

#include <stdio.h>
#define maxn 12882 int dp[maxn]; int max(int a, int b){ return a > b ? a : b; } int main()
{
int n, totalWeight, i, j, weight, val;
scanf("%d%d", &n, &totalWeight);
for(i = 1; i <= n; ++i){
scanf("%d%d", &weight, &val);
for(j = totalWeight; j; --j){
if(j >= weight) dp[j] = max(dp[j], dp[j - weight] + val);
}
}
printf("%d\n", dp[totalWeight]);
return 0;
}<span style="font-family:FangSong_GB2312;">
</span>

优化后的代码:耗时219ms

#include <stdio.h>
#define maxn 12882 int dp[maxn]; int main()
{
int n, totalWeight, i, j, weight, val;
scanf("%d%d", &n, &totalWeight);
for(i = 1; i <= n; ++i){
scanf("%d%d", &weight, &val);
for(j = totalWeight; j; --j){
if(j >= weight && dp[j - weight] + val > dp[j])
dp[j] = dp[j - weight] + val;
}
}
printf("%d\n", dp[totalWeight]);
return 0;
}

用二维dp数组写了一个,果断的超了内存,占用内存大概12882*3404*4/1024=171兆。题目限制是65兆

TLE:

#include <stdio.h>
#define maxn 12882 int dp[3404][maxn]; int max(int a, int b){ return a > b ? a : b; } int main()
{
int n, m, weight, val, i, j;
scanf("%d%d", &n, &m);
for(i = 1; i <= n; ++i){
scanf("%d%d", &weight, &val);
for(j = 1; j <= m; ++j)
if(j >= weight)
dp[i][j] = max(dp[i-1][j], dp[i-1][j-weight] + val);
else dp[i][j] = dp[i-1][j];
}
printf("%d\n", dp[n][m]);
return 0;
}

POJ3624 Charm Bracelet 【01背包】的更多相关文章

  1. POJ 3624 Charm Bracelet(01背包)

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

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

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

  3. 洛谷——2871[USACO07DEC]手链Charm Bracelet——01背包

    题目描述 Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like t ...

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

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

  5. POJ 3624 Charm Bracelet 0-1背包

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

  6. 洛谷 P2871 [USACO07DEC]手链Charm Bracelet && 01背包模板

    题目传送门 解题思路: 一维解01背包,突然发现博客里没有01背包的板子,补上 AC代码: #include<cstdio> #include<iostream> using ...

  7. poj3642 Charm Bracelet(0-1背包)

    题目意思: 给出N,M,N表示有N个物品,M表示背包的容量.接着给出每一个物品的体积和价值,求背包可以装在的最大价值. http://poj.org/problem? id=3624 题目分析: o- ...

  8. Poj3624 Charm Bracelet (01背包)

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

  9. [转]POJ3624 Charm Bracelet(典型01背包问题)

    来源:https://www.cnblogs.com/jinglecjy/p/5674796.html 题目链接:http://bailian.openjudge.cn/practice/4131/ ...

随机推荐

  1. 打造一个全命令行的Android构建系统

    IDE都是给小白程序员的,大牛级别的程序员一定是命令行控,终端控,你看大牛都是使用vim,emacs 就一切搞定” 这话说的虽然有些绝对,但是也不无道理,做开发这行要想效率高,自动化还真是缺少不了命令 ...

  2. jboss final 7.1.1相关error以及解决方式

    问题1 报错提示: MSC00001: Failed to start service jboss.web.deployment.default-host./: Caused by: java.lan ...

  3. 假设让我又一次设计一款Android App

    转载请注明出处: 本文来自aspook的博客:http://blog.csdn.net/ahence/article/details/47154419 开发工具的选择 开发工具我将选用Android  ...

  4. C语言:一个涉及指针函数返回值与printf乱码、内存堆栈的经典案例

    一个奇怪的C语言问题,涉及到指针.数组.堆栈.以及printf.以下实现: 整数向字符串的转换,返回字符串指针,并在main函数中调用printf显示. #include<stdio.h> ...

  5. 回车登录(支持IE 和 火狐等浏览器)

    $("body").keydown(function(e){ var curKey = e.which; if(curKey == 13){ $("#Btn_login& ...

  6. 点击了一个link button,查看后台调用

    使用F12进行监视 本身是一个linkbutton,可以看到绑定了一个JavaScript <a id="gvStaticConnection_ctl02_fresh" hr ...

  7. DB-MySql:MySQL 及 SQL 注入

    ylbtech-DB-MySQL:MySQL 及 SQL 注入 1.返回顶部 1. MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL ...

  8. oracle错误ORA-00604 递归sql级别1出现错误 ora-00942 表或试图不存在 ORA-06512 在line 11

    错误截图如下: 搜索了很多方法,但是都没有办法解决,不过最终还是找到了一个好的解决办法, 多谢那位仁兄的博客[http://blog.itpub.net/519536/viewspace-689469 ...

  9. 原生js简易日历效果实现

    这里我们将用原生js实现简易的日历,原理和之前的原生js选项卡差不多,不过也有些区别: 首先html代码: <div class="container"> <di ...

  10. 【node.js web项目】解决路由默认是hash模式(带#)

    [概念讲述] 1.什么是hash模式 Vue+WebPack项目,本身是一个单页应用. vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 ...