题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1085

题意: 中文题诶~

思路: 01背包模板题.

用dp[i][j]表示到第i个物品花去j空间能存储的最大价值, 那么很显然有

 for(int i=; i<=n; i++){
for(int j=; j<=m; j++){ //注意这里的j是从0开始而非a[i]
if(j>=a[i]){
dp[i][j]=max(dp[i-][j-a[i]]+b[i], dp[i-][j]);
}else{
dp[i][j]=dp[i-][j];
}
}
}

ac代码:

 #include <bits/stdc++.h>
#define MAXN 110
#define MAN 10010
using namespace std; int dp[MAXN][MAN]; //dp[i][j]表示到第i个物品花去j空间能存储的最大价值 int main(void){
int n, m, a[MAXN], b[MAXN]; //n为物品数量, m为背包容量, a, b分别存储物品的体积和价值
scanf("%d%d", &n, &m);
for(int i=; i<=n; i++){
scanf("%d%d", &a[i], &b[i]);
}
memset(dp, , sizeof(dp));
for(int i=; i<=n; i++){
for(int j=; j<=m; j++){
if(j>=a[i]){
dp[i][j]=max(dp[i-][j-a[i]]+b[i], dp[i-][j]);
}else{
dp[i][j]=dp[i-][j];
}
}
}
printf("%d\n", dp[n][m]);
return ;
}

我们也可以只开一维数组, 用dp[j]表示花了j空间后最大可以装的价值

那么代码我们可以写成:

 #include <bits/stdc++.h>
#define MAXN 10010
using namespace std; int dp[MAXN]; //dp[j]表示花去j空间能存储的最大价值 int main(void){
int n, m, a[MAXN], b[MAXN]; //n为物品数量, m为背包容量, a, b分别存储物品的体积和价值
scanf("%d%d", &n, &m);
for(int i=; i<=n; i++){
scanf("%d%d", &a[i], &b[i]);
}
memset(dp, , sizeof(dp));
for(int i=; i<=n; i++){
for(int j=m; j>=a[i]; j--){ //这里是从后往前推的
dp[j]=max(dp[j-a[i]]+b[i], dp[j]);
}
}
printf("%d\n", dp[m]);
return ;
}

51nod1085(01背包)的更多相关文章

  1. 【模板】51Nod--1085 01背包

    在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价值. Input 第1行,2个整数 ...

  2. 51Nod1085 0-1背包(一维和二维数组实现)

    背包是典型的动态规划问题,关于背包问题的详解,推荐博客:点击打开链接(这篇博客有点错误,代码for循环里错了,不过讲解 的很详细) 题目如下: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积 ...

  3. UVALive 4870 Roller Coaster --01背包

    题意:过山车有n个区域,一个人有两个值F,D,在每个区域有两种选择: 1.睁眼: F += f[i], D += d[i] 2.闭眼: F = F ,     D -= K 问在D小于等于一定限度的时 ...

  4. POJ1112 Team Them Up![二分图染色 补图 01背包]

    Team Them Up! Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7608   Accepted: 2041   S ...

  5. Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)

    传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ...

  6. *HDU3339 最短路+01背包

    In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  7. codeforces 742D Arpa's weak amphitheater and Mehrdad's valuable Hoses ——(01背包变形)

    题意:给你若干个集合,每个集合内的物品要么选任意一个,要么所有都选,求最后在背包能容纳的范围下最大的价值. 分析:对于每个并查集,从上到下滚动维护即可,其实就是一个01背包= =. 代码如下: #in ...

  8. POJ 3624 Charm Bracelet(01背包)

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

  9. (01背包变形) Cow Exhibition (poj 2184)

    http://poj.org/problem?id=2184   Description "Fat and docile, big and dumb, they look so stupid ...

随机推荐

  1. HTML5全局属性和事件详解

    属性: HTML5属性能够赋给标签元素含义和语境,下面的全局属性可用于任何 HTML5 元素. 属性 描述 contenteditable 规定是否允许用户编辑内容. contextmenu 规定元素 ...

  2. 利用python合并两个文件

    1格式如下 在做利用zabbix的api来批量添加主机的时候,需要处理ip和hostname,在借用别人写的py程序的基础上,自己有改装了以下脚本,为自己使用.需要时ip和hostname为一个统一格 ...

  3. QQ等级表

    什么是QQ等级呢? 2003年,腾讯公司推出了QQ等级制度 . 最早是以小时,来计算的,那段时间,绝大部分QQ用户都在挂QQ,之后就有不少媒体指责其浪费能源,在有关部门的介入下,腾讯公司将QQ等级变为 ...

  4. 主流ORM对比分析,莫人云亦云

    目前主流的ORM框架有Entity Framework,Dapper,NHibernate,NBear,Castle ActiveRecord,BATIS.NET六种,都是免费开源的.下边从官方支持性 ...

  5. [Unity3D] Normal map、Diffuse map 和 Speculer map

    Normal map : Normal map (法线贴图) 它的作用是模拟出高模上的一些细节纹理,特别是将高模上的圆滑和粗糙度投射到低模上,让低模也有高模的效果. 因为高模的面数非常多,导入引擎后电 ...

  6. Fast Member

    https://github.com/mgravell/fast-member/ http://stackoverflow.com/questions/6158768/c-sharp-reflecti ...

  7. json 对象 字符串 转换

    json字符串转json对象:jQuery.parseJSON(jsonStr); json对象转json字符串:JSON.stringify(jsonObj);

  8. 【11-23】mysql学习笔记02

    SQL的历史 SQL是Structed Query Language 的缩写,即”结构化查询语言” SQL原名是 sequel,后来由于法律原因,改名 SQL最早可以追溯到 1974 年,源于 IBM ...

  9. tyvj1195 最后的晚餐

    背景 话说zhangbh001给盖子编的Windows 2012超时了(- -!),所以他不得不在自己家门口亲眼见证这个电影般的场景.虽然他不想错过这个美妙的时刻,但是他的肚子一再抗议,要求先吃完这最 ...

  10. PHP保留2位小数 格式化小数、浮点数

    JS保留两位小数例子 四舍五入使用函数 toFixed() <html> <head> </head> <script language="java ...