51nod1085(01背包)
题目链接: 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背包)的更多相关文章
- 【模板】51Nod--1085 01背包
在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价值. Input 第1行,2个整数 ...
- 51Nod1085 0-1背包(一维和二维数组实现)
背包是典型的动态规划问题,关于背包问题的详解,推荐博客:点击打开链接(这篇博客有点错误,代码for循环里错了,不过讲解 的很详细) 题目如下: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积 ...
- UVALive 4870 Roller Coaster --01背包
题意:过山车有n个区域,一个人有两个值F,D,在每个区域有两种选择: 1.睁眼: F += f[i], D += d[i] 2.闭眼: F = F , D -= K 问在D小于等于一定限度的时 ...
- POJ1112 Team Them Up![二分图染色 补图 01背包]
Team Them Up! Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7608 Accepted: 2041 S ...
- 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 ...
- *HDU3339 最短路+01背包
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- codeforces 742D Arpa's weak amphitheater and Mehrdad's valuable Hoses ——(01背包变形)
题意:给你若干个集合,每个集合内的物品要么选任意一个,要么所有都选,求最后在背包能容纳的范围下最大的价值. 分析:对于每个并查集,从上到下滚动维护即可,其实就是一个01背包= =. 代码如下: #in ...
- POJ 3624 Charm Bracelet(01背包)
Charm Bracelet Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 34532 Accepted: 15301 ...
- (01背包变形) Cow Exhibition (poj 2184)
http://poj.org/problem?id=2184 Description "Fat and docile, big and dumb, they look so stupid ...
随机推荐
- Python基础-三次用户验证登录购买商品程序
需求: 一:三次登录锁定 1.用户信息存放于文件中 2.尝试三次都失败,锁定用户 二.购物车功能要求: 要求用户输入总资产,例如:2000显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品 ...
- 使用Extjs组件实现Top-Left-Main布局并且增加事件响应
每次在毕业答辩会上,看到同专业的同学只要是XXX管理系统,就是下图所示的界面,看来这中布局还是很受欢迎的(偷笑).接下来进入我们正题,在web项目无论是前端还是后台管理比较常见的布局就是Top-Lef ...
- host 文件
艾玛,果然一个破的小问题也能纠结好久!不过终于过去了... 1. 机器上的host文件目录一般是 /etc/hosts 主要可能会涉及一些网站的安全访问,把网站加入hosts也就意味着 加入了白名单 ...
- Codeforces 2016 ACM Amman Collegiate Programming Contest B. The Little Match Girl(贪心)
传送门 Description Using at most 7 matchsticks, you can draw any of the 10 digits as in the following p ...
- Xcode6 管理provisioning profile
profile文件的存放位置为 /Users/用户名/Library/MobileDevice/Provisioning Profiles 更新profile文件后,Code Signing Iden ...
- pthread_cond_signal惊群现象
1.如下代码所示: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include < ...
- 【Beta版本】冲刺随笔汇总
[Beta版本]冲刺计划及安排 [Beta版本]冲刺-Day1 [Beta版本]冲刺-Day2 [Beta版本]冲刺-Day3 [Beta版本]冲刺-Day4 [Beta版本]冲刺-Day5 [Bet ...
- <<< Java提取网页源码
package com.sevennight; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io ...
- LogStash配置、使用(三)
LogStash配置 官方文档:https://www.elastic.co/guide/en/logstash/current/index.html 查看yum安装路径 rpm -ql logsta ...
- 10月25日下午PHP静态、抽象、接口
多态(运行多态)概念:当父类引用指向子类实例,由于子类里面对父类的方法进行了重写,父类引用在调用该方法的时候表现出的不同状态.条件:1.必须发生在继承下2.必须重写父类方法3.父类引用调用该方法 如果 ...