练习3-Q

题目：Problem Q

Problem Description
Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave …<br>The bone collector had a big bag with a volume of V ,and along his trip of collecting there are a lot of bones , obviously , different bone has different value and different volume, now given the each bone’s value along his trip , can you calculate out the maximum of the total value the bone collector can get ?<br><center><img src=../../../data/images/C154-1003-1.jpg> </center><br>

Input
The first line contain a integer T , the number of cases.<br>Followed by T cases , each case three lines , the first line contain two integer N , V, (N <= 1000 , V <= 1000 )representing the number of bones and the volume of his bag. And the second line contain N integers representing the value of each bone. The third line contain N integers representing the volume of each bone.

Output
One integer per line representing the maximum of the total value (this number will be less than 2<sup>31</sup>).

Sample Input
1 5 10 1 2 3 4 5 5 4 3 2 1

Sample Output
14

题意：

01背包问题，往体积为V的背包里放体积和价值不同的东西，求背包被放满时的最大价值；

思路：

dp[i][j] = max(dp[i-1][j], dp[i-1][j-vo[i]]+va[i]);

代码：

# include <iostream>
# include <string.h>
# include <algorithm>

using namespace std;

int dp[1001][1001];

int main()
{
int va[1001], vo[1001];
int T;
cin >> T;
while(T--)
{
memset(va,0,sizeof(va));
memset(vo,0,sizeof(vo));
memset(dp,0,sizeof(dp));
int N, V;
cin >> N >> V;
for(int i = 1;i <= N; i++)
cin >> va[i];
for(int i = 1;i <= N; i++)
cin >> vo[i];

for(int i = 1;i <= N; i++)
{
for(int j = 0;j <= V; j++)
{
if(vo[i] <= j)
dp[i][j] = max(dp[i-1][j], dp[i-1][j-vo[i]]+va[i]);
else
dp[i][j] =dp[i-1][j];
}
}

/*for(int i = 1;i <= N; i++)
{
for(int j = 0;j <= V; j++)
cout << dp[i][j] << " ";
cout << endl;
}*/
cout << dp[N][V]<<endl;
}

return 0;
}


• 本文已收录于以下专栏：

vim练习

• baiquan17
• 2017年04月07日 11:57
• 429

linux 各命令字练习

linux 各命令字练习
• lile777
• 2016年09月14日 17:48
• 1953

练习学习Linq和Lambda

1、 查询Student表中的所有记录的Sname、Ssex和Class列。 select sname,ssex,class from student Linq:     from s in S...
• make1828
• 2014年07月23日 14:08
• 663

css3 html5 3D动画练习

New Document div{ margin-bottom:10px; width:200px; height:100px; } @keyframes myfirst { from {bac...
• zhaoqingkaitt
• 2015年01月10日 10:46
• 1138

Android基础练习

1.自定义Toast 步骤，首先需要添加一个自定义的toast布局，然后通过构造方法实例化一个Toast对象即可 public void onToast(View view) { ...
• u011337769
• 2017年06月08日 19:49
• 310

oracle百例训练

﻿﻿ Oracle系列《一》：简单SQL与单行函数     使用s   cott/tiger用户下的emp表和dept表完成下列练习，表的结构说明如下 emp员...
• u010098159
• 2016年03月24日 18:23
• 1257

HTML练习-1

http://7xrp04.com1.z0.glb.clouddn.com/task_1_1_1.jpg 代码：   第一部分的          p{ margin: 0px; paddi...
• itzhengmaolin
• 2016年08月01日 19:44
• 349

shell脚本练习（三）

1.模拟linnux登录shell#/bin/bash echo -n "login:" read name echo -n "password:" read passwd if [ \$name =...
• u011915230
• 2016年07月20日 15:20
• 2034

Java Web学习(8)：阶段小项目练习

• erlian1992
• 2016年07月12日 13:39
• 3102

h5学习笔记： css布局案例练习

• hero82748274
• 2016年08月22日 21:55
• 2346

举报原因： 您举报文章：练习3-Q 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)