关闭

HDU2602 01背包问题

102人阅读 评论(0) 收藏 举报
分类:

挺想哭的调试了好久都没用,结果是int的问题。。。

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

#include<iostream>
#include<stdio.h>
#include<memory.h>
using namespace std;
int mon[1003],w[1003];
int f[1001]={0};
int max(int x,int y)
{
        if(x>y)
                return x;
        else
                return y;
}
int main()
{
        int n,v,i,j,k;
        int t;
        cin>>t;
        for( k=0;k<t;k++)
        {
                memset(f,0,sizeof(f));
                cin>>n>>v;
                for(i=0;i<n;i++)
                {
                        cin>>mon[i];
                }
                 for(i=0;i<n;i++)
                {
                        cin>>w[i];
                }
                //for(i=0;i<n;i++)
                // {
                //         cout<<mon[i]<<w[i];
                // }
                for(i=0;i<n;i++)
                {
                        for(j=v;j>=w[i];j--)
                        {
                              f[j]=max(f[j],f[j-w[i]]+mon[i]);
                              //cout<<f[v]<<endl;
                        }
                }
                cout<<f[v]<<endl;
        }
        /*for(i=0;i<t;i++)
        {
                cout<<a[i]<<endl;
        }*/
        return 0;
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

遗传算法解01背包问题(Java)

遗传算法解01背包问题,并给出了完整可运行的java代码
  • liyuming0000
  • liyuming0000
  • 2015-09-12 16:26
  • 2780

01背包问题几种算法实现

最简单的就是利用搜索,把每一种情况都考虑。 //深度搜索。复杂度O(2^n) int dfs(int i,int j) { int res;//剩余的空间量。 if(i==n)res=0;//...
  • ydd97
  • ydd97
  • 2015-01-29 15:50
  • 1200

最通俗易懂的01背包问题讲解

1、动态规划(DP)  动态规划(Dynamic Programming,DP)与分治区别在于划分的子问题是有重叠的,解过程中对于重叠的部分只要求解一次,记录下结果,其他子问题直接使用即可,减少了重复...
  • FX677588
  • FX677588
  • 2017-04-02 14:02
  • 1396

算法学习笔记(二)——01背包问题之回溯解法

背包问题,相信各位看官肯定都有所耳闻!笔者就在此简单的描述一下背包问题: 给定一背包和n件物品,背包的容量为c,第i件物品的重量为w[i],价值为v[i](1         思路分析:显...
  • renshengkudaun
  • renshengkudaun
  • 2016-04-03 08:38
  • 3194

HDU_01背包系列

HDU 01背包系列持续更新中……
  • jhgkjhg_ugtdk77
  • jhgkjhg_ugtdk77
  • 2016-07-22 12:22
  • 2540

回溯法-01背包问题之一:递归模式

一、回溯法 回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在包含问题的所有解的解空间树中按照深度优先的策略,从根节点出发搜索解空间树。算法搜索至解空间树的任一节点时,总是先判断该节点是否肯定不包...
  • chifuqi
  • chifuqi
  • 2014-05-09 14:48
  • 2394

01背包问题和完全背包问题

在hihocoder上面两期的题目,一个01背包问题,一个完全背包问题。总结一下!
  • KangRoger
  • KangRoger
  • 2014-08-27 10:27
  • 51231

回溯法-经典 01背包问题

经典问题:给定N中物品和一个背包。物品i的重量是Wi,其价值位Vi ,背包的容量为C。问应该如何选择装入背包的物品,使得转入背包的物品的总价值为最大??分析1、如上图碰到一组数据,有两种可能:选或者不...
  • Double2hao
  • Double2hao
  • 2016-06-22 11:37
  • 11829

超大背包问题(01背包)

超大背包问题:有n个重量和价值分别为w[i]和v[i]的物品,从这些物品中挑选总重量不超过W的物品,求所有挑选方案中价值总和的最大值。其中,1 ≤ n ≤ 40, 1 ≤ w[i], v[i] ≤ 1...
  • LYHVOYAGE
  • LYHVOYAGE
  • 2014-10-08 09:48
  • 4652

动态规划之01背包问题讲解

给大家附上一个题目吧,便于理解 ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值。 输入:每组测试数据第一行为2个正整数,...
  • su20145104009
  • su20145104009
  • 2016-05-04 10:21
  • 3357
    个人资料
    • 访问:1342次
    • 积分:127
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档