zoukankan      html  css  js  c++  java
  • HDU 2602 DP大水题 01背包

    除了LCS以外过的第一个DP 而且是第一个用一维数组的 DP  题目及AC代码如下

    基本的01背包问题的状态转移方程:

    Bone Collector

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 25275    Accepted Submission(s): 10244


    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
     
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<string.h>
     4 
     5 const int max_n=1010;
     6 
     7 int max(int a,int b)
     8 {
     9     return a>b?a:b;
    10 }
    11 
    12 int main(void)
    13 {
    14 
    15     int cases;
    16     int v[max_n];
    17     int w[max_n];
    18     int dp[max_n];
    19     int N,V;
    20     scanf("%d",&cases);
    21     while(cases--)
    22     {
    23         memset(dp,0,sizeof(dp));
    24         scanf("%d%d",&N,&V);
    25         for(int i=0;i<N;i++)
    26         {
    27             scanf("%d",&w[i]);              //value
    28         }
    29         for(int i=0;i<N;i++)
    30         {
    31             scanf("%d",&v[i]);              //volume
    32         }
    33         for(int i=0;i<N;i++)
    34             for(int vi=V;vi>=v[i];vi--)
    35                 dp[vi]=max(dp[vi],dp[vi-v[i]]+w[i]);
    36 
    37         printf("%d
    ",dp[V]);
    38     }
    39     return 0;
    40 }
     
     
  • 相关阅读:
    简易sql拼接工具类(使用StringBuilder实现)
    缓存工具类(使用ConcurrentMap集合实现)
    properties文档读取工具类
    【Codeforces Round #655 (Div. 2)】A-D
    【2020 杭电多校第四场】Go Running 最小点覆盖
    【2020 杭电多校第四场】1002 Blow up the Enemy
    【2020 HDU 多校训练第三场 1007 Tokitsukaze and Rescue】暴力删边&最短路
    【2020杭电多校第二场】Total Eclipse 思维+并查集
    【2020HDU多校】Lead of Wisdom 暴力
    【CF-1371 C-E2】
  • 原文地址:https://www.cnblogs.com/VOID-133/p/3631331.html
Copyright © 2011-2022 走看看