HDU-2602,Bone Collector(01背包)

简介: HDU-2602,Bone Collector(01背包)

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 …

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 ?


Input:


The first line contain a integer T , the number of cases.

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 231).


Sample Input:


1


5 10


1 2 3 4 5


5 4 3 2 1


Sample Output:


14


解题思路:


这是个典型的01背包问题,状态转移方程模板如下:

for(int i=1;i<=n;i++)
{
    for(int j=V;j>=v[i];j--)
    {
  dp[j]=max(dp[j],dp[j-v[i]]+d[i]);
    }
}


程序代码:


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAX=1001;
int dp[MAX],d[MAX],v[MAX];
int t,n,V;
int main()
{
  scanf("%d",&t);
  while(t--)
  {
    memset(dp,0,sizeof(dp));
    scanf("%d %d",&n,&V);//n代表骨头的总数,V代表袋子的容积 
    for(int i=1;i<=n;i++)
      scanf("%d",&d[i]);//每个骨头的价值 
    for(int j=1;j<=n;j++)
      scanf("%d",&v[j]);//每个骨头的容积 
    for(int i=1;i<=n;i++)
    {
      for(int j=V;j>=v[i];j--)
      {
        dp[j]=max(dp[j],dp[j-v[i]]+d[i]); 
      }//容积减去相应的骨头的容积,同时加上这个骨头的价值 
    }
    printf("%d\n",dp[V]);
  }
  return 0;
}



相关文章
|
9月前
|
算法
1091 zoj Knight Moves的BFS算法和DFS
1091 zoj Knight Moves的BFS算法和DFS
35 0
|
7月前
poj 3624 Charm Bracelet(简单01背包)
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.
19 0
|
7月前
light oj 1231-1232 - 1233- Coin Change 背包
暂时到半懂不懂也没办法讲明白,就不误人子弟了,直接贴代码了。
21 0
POJ-3624,Charm Bracelet(01背包)
POJ-3624,Charm Bracelet(01背包)
|
人工智能
Codeforces 220B-Little Elephant and Array-扫描线 & 树状数组
题意: 给出一个长度为n的数组,有m个询问,每次询问给出一个区间,问这个区间内有多少个数x恰好出现x次
104 0
Codeforces 220B-Little Elephant and Array-扫描线 & 树状数组
[转]POJ3624 Charm Bracelet(典型01背包问题)
来源:https://www.cnblogs.com/jinglecjy/p/5674796.html 题目链接:http://bailian.openjudge.cn/practice/4131/ Time Limit: 1000MS          Memory Limit: 65536K  ...
1207 0
|
存储 算法 测试技术