题目链接:https://vjudge.net/contest/103424#problem/A

题目大意:

第一行输入几组数据,第二行第一个数字代表物体个数,第二个数代表总体积。需要注意的是,第三排输入的是物品的价值,第四排的物品的体积。在不可以拆分物体的前提下,已知背包的总体积,最大能获取的价值是多少。

01背包模板题,没什么好说的。(附两种形式的dp数组解决方案)

//一维dp数组实现(滚动数组)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define max(a,b) ((a)>(b)?(a):(b)) int main()
{
int t, n, m, i, j;
int a[], b[];
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &m);
for (i = ; i<n; i++)
scanf("%d", &a[i]);
for (i = ; i<n; i++)
scanf("%d", &b[i]);
int dp[]; //dp数组始终记录当前体积的最大价值
memset(dp, , sizeof(dp));
for (i = ; i<n; i++) //从第一个开始循环
for (j = m; j >= b[i]; j--)
dp[j] = max(dp[j], dp[j - b[i]] + a[i]); //比较放入i物体后的价值与不放之前的价值,记录大的值
printf("%d\n", dp[m]); //输入总体积的最大价值
}
return ;
}
//二维dp数组实现
#include<iostream>
using namespace std;
int dp[][]; //dp[i][j]表示前i个物品,当背包容量为j的时候所能装下大的最大值
#define max(a,b) ((a)>(b)?(a):(b)) int main()
{
int t, n, v, i, j;
int va[], vo[];
cin >> t;
while (t--)
{
cin >> n >> v;
for (i = ; i <= n; i++)
cin >> va[i];
for (i = ; i <= n; i++)
cin >> vo[i];
memset(dp, , sizeof(dp));//初始化操作
for (i = ; i <= n; i++)
{
for (j = ; j <= v; j++)
{
if (vo[i] <= j)//表示第i个物品将放入大小为j的背包中
dp[i][j] = max(dp[i - ][j], dp[i - ][j - vo[i]] + va[i]); //比较放入i物体后的价值与不放之前的价值,记录大的价值
else //第i个物品无法放入
dp[i][j] = dp[i - ][j];
}
}
cout << dp[n][v] << endl;
}
return ;
}

2018-04-27

HDU 2602 Bone Collector 骨头收集者【01背包】的更多相关文章

  1. HDU 2602 Bone Collector骨头收藏者(01背包)

    题意:收藏骨头. 思路: 常规的01背包. #include <iostream> #define N 1005 using namespace std; int volume[N]; / ...

  2. HDOJ(HDU).2602 Bone Collector (DP 01背包)

    HDOJ(HDU).2602 Bone Collector (DP 01背包) 题意分析 01背包的裸题 #include <iostream> #include <cstdio&g ...

  3. HDU 2602 Bone Collector 0/1背包

    题目链接:pid=2602">HDU 2602 Bone Collector Bone Collector Time Limit: 2000/1000 MS (Java/Others) ...

  4. hdu 2602 Bone Collector(01背包)模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/Ot ...

  5. HDU 2602 Bone Collector(经典01背包问题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/O ...

  6. HDU 2602 Bone Collector

    http://acm.hdu.edu.cn/showproblem.php?pid=2602 Bone Collector Time Limit: 2000/1000 MS (Java/Others) ...

  7. HDU 2602 Bone Collector (01背包问题)

    原题代号:HDU 2602 原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 原题描述: Problem Description Many yea ...

  8. HDU 2602 - Bone Collector - [01背包模板题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602 Many years ago , in Teddy’s hometown there was a ...

  9. HDU 2602 Bone Collector(01背包裸题)

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

随机推荐

  1. luogu P1344 [USACO4.4]追查坏牛奶Pollutant Control

    传送门 要求断掉某些边使得两个点不连通,显然是最小割 但是要求选的边数尽量少,,, 可以考虑修改边权(容量),即把边权\(c\)改成\(c*(m+1)+1\) 没了 // luogu-judger-e ...

  2. CF949D Curfew

    传送门 跟这个大佬学的->戳我 假设只有一个宿管,那么从前往后做的过程中,如果能到达某个寝室范围内的人数不够\(b\),那么不如把这个寝室空出来,这样更有利于后面的抉择;反之,就把这个寝室搞正好 ...

  3. luogu P3924 康娜的线段树

    题面传送门 我们可以画图找规律 这里没图,要看图可以去看M_sea dalao的题解(逃 可以发现单个节点\(i\)对答案的贡献为该节点的点权\(*\frac{1}{2^{dep_i}}\)(\(de ...

  4. vue学习之用 Vue.js + Vue Router 创建单页应用的几个步骤

    通过vue学习一:新建或打开vue项目,创建好项目后,接下来的操作为: src目录重新规划——>新建几个页面——>配置这几个页面的路由——>给根实例注入路由配置 src目录重整 在项 ...

  5. B - Finding Palindromes (字典树+manacher)

    题目链接:https://cn.vjudge.net/contest/283743#problem/B 题目大意:给你n个字符串,然后问你将这位n个字符串任意两两组合,然后问你这所有的n*n种情况中, ...

  6. mysql 案例 ~ pt-io工具的使用

    一 简介:如何使用pt-iopfile调查io具体信息二 目的:利用pt-iopfile分析mysql内部IO操作密集的文件,用以发现问题三 使用: pt-iopfile -p mysql_pid   ...

  7. JDK7与8内存参数解析与修改

    JDK内存 jdk内存实际是jvm内存,jvm有一个运行时数据区,其实就是对这一部分的大小分配. 运行时数据区通常包括这几个部分:程序计数器(Program Counter Register).Jav ...

  8. Linux input子系统简介

    1.前言 本文主要对Linux下的input子系统进行介绍 2. 软件架构 图 input子系统结构图 input子系统主要包括三个部分:设备驱动层.核心层和事件层.我们可以分别理解为:具体的输入设备 ...

  9. CC254x/CC2540/CC2541库函数速查(转)

    hci.h 转自:http://blog.csdn.net/xiaoleiacmer/article/details/44036607#t1 //分配内存,应用程序不应该调用这个函数. void *H ...

  10. 【转】理解*(void**)

    #include <stdio.h> int main() { int *p; ; unsigned ; p = &a; printf("%d\n", *p); ...