zoukankan      html  css  js  c++  java
  • HDU 2602.Bone Collector-动态规划0-1背包

    Bone Collector

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


    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
     
    Author
    Teddy
     
    Source
     
     
     
    代码(一维数组):
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N=1e5+10;
     4 int val[N],wei[N],dp[N];
     5 int main(){
     6     int t,n,m;
     7     scanf("%d",&t);
     8     while(t--){
     9             memset(val,0,sizeof(val));
    10             memset(wei,0,sizeof(wei));
    11             memset(dp,0,sizeof(dp));
    12         scanf("%d%d",&n,&m);
    13         for(int i=0;i<n;i++)
    14             scanf("%d",&val[i]);
    15         for(int i=0;i<n;i++)
    16             scanf("%d",&wei[i]);
    17         for(int i=0;i<n;i++){
    18             for(int j=m;j>=wei[i];j--){
    19                 dp[j]=max(dp[j],dp[j-wei[i]]+val[i]);
    20             }
    21         }
    22         printf("%d
    ",dp[m]);
    23     }
    24     return 0;
    25 }

    代码(二维数组):

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int N=1e3+10;
     4 int val[N],wei[N],dp[N][N];
     5 int main(){
     6     int t,n,m;
     7     scanf("%d",&t);
     8     while(t--){
     9         memset(dp,0,sizeof(dp));
    10         scanf("%d%d",&n,&m);
    11         for(int i=1;i<=n;i++)
    12             scanf("%d",&val[i]);
    13         for(int i=1;i<=n;i++)
    14             scanf("%d",&wei[i]);
    15         for(int i=1;i<=n;i++){
    16             for(int j=0;j<=m;j++){
    17                 if(wei[i]<=j)dp[i][j]=max(dp[i-1][j],dp[i-1][j-wei[i]]+val[i]);
    18                 else dp[i][j]=dp[i-1][j];
    19             }
    20         }
    21         printf("%d
    ",dp[n][m]);
    22     }
    23     return 0;
    24 }
  • 相关阅读:
    bootstrap-datetimepicker日期控件下载
    【eclipse】启动不了报错java was started but returned exit code=13
    jsp选项卡导航实现——模板
    【eclipse】Multiple annotations found at this line:——解决方法
    【链接】SpringBoot启动错误
    eclipse隐藏关闭的工程
    【链接】虚拟机使用桥接模式不能上网
    python中使用指定GPU
    python开启GPU加速
    Adam那么棒,为什么还对SGD念念不忘 (1) —— 一个框架看懂优化算法
  • 原文地址:https://www.cnblogs.com/ZERO-/p/9741042.html
Copyright © 2011-2022 走看看