zoukankan      html  css  js  c++  java
  • hdu 2602 Bone Collector

      终于开始做自己一直不敢碰的dp了,内心颇不平静。很久以前看过的背包九讲也没什么印象了。这个题错了四次。之前老师有说过看到dp不要把它想成dp,要按照数学归纳的路子来。先来个最初的归纳假设,如果过弱再加强归纳假设,如果过强,则在松一些。说服自己尽量这么干,毕竟刚开始真的会比较困难。要找到最初的归纳假设就相当困难,何况加强或者松弛,于我,比较难。

      写着题时脑子里面一直恍恍惚惚的,恐惧心理已经完全打败了我。四次错在v不是从0开始,哎。该死。

      

    View Code
    #include <algorithm>
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    
    using namespace std;
    
    const int maxn=1001;
    
    struct BONE
    {
        int val;
        int vol;
    }bone[maxn];
    
    int n,v;
    void init()
    {
        scanf("%d %d",&n,&v);
        for(int i=1;i<=n;i++)
            scanf("%d",&bone[i].val);
        for(int i=1;i<=n;i++)
            scanf("%d",&bone[i].vol);
    }
    
    int dp[maxn][maxn];
    void DP()
    {
        memset(dp,0,sizeof(dp));
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<=v;j++)
            {
                if(j>=bone[i].vol)
                    dp[i][j]=max(dp[i-1][j],dp[i-1][j-bone[i].vol]+bone[i].val);
                else
                    dp[i][j]=dp[i-1][j];
            }
        }
        printf("%d\n",dp[n][v]);
    }
    
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            init();
            DP();
        }
        return 0;
    }

      

  • 相关阅读:
    TCP协议与UDP协议的区别
    打印阵列
    Java的动态代理机制详解(转)
    Java内存模型(转载)
    Hibernate工作原理及为什么要用?(转http://www.cnblogs.com/javaNewegg/archive/2011/08/28/2156521.html)
    SpringMVC工作原理
    FPGrowth算法原理
    十大排序之快速排序
    python logging
    把字符串转换成整数
  • 原文地址:https://www.cnblogs.com/RainingDays/p/2840909.html
Copyright © 2011-2022 走看看