zoukankan      html  css  js  c++  java
  • 采药

    采药

    Time Limit:   1000MS       Memory Limit:   65535KB
    Submissions:   380       Accepted:   113
    Description辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。” 如果你是辰辰,你能完成这个任务吗?
    Input输入的第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),用一个空格隔开,T代表总共能够用来采药的时间,M代表山洞里的草药的数目。接下来的M行每行包括两个在1到100之间(包括1和100)的整数,分别表示采摘某株草药的时间和这株草药的价值。
    Output输出包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。

    Sample Input

    70 3
    71 100
    69 1
    1 2

    Sample Output

    3
    方法一
    DFS 超时
    #include <iostream>
    using namespace std;
    int value,num;
    int val[100],tim[100];
    int MAX_Val;
    int flag,temp;
    int vis[100];
    void dfs(int n)
    {
        if(n>num)
        return ;
        if(temp>value)
        return ;
        if(n==num&&MAX_Val<flag)
        {
            MAX_Val = flag;
        }
        for(int i=0;i<num;i++)
        {
            if(!vis[i])
            {
                temp+=tim[i];
                flag+=val[i];
                vis[i] = 1;
                dfs(i+1);
                vis[i] = 0;
                temp-=tim[i];
                flag-=val[i];
            }
        }
    }
     int main()
     {
         cin>>value>>num;
         for(int i=0;i<num;i++)
         {
             cin>>tim[i]>>val[i];
         }
         MAX_Val = 0;
         flag =0;temp=0;
         dfs(0);
         cout<<MAX_Val<<endl;
         return 0;
     }
    

      



    方法二
    DP
    #include<iostream>
    # include<cstring>
    # define max(a,b) a>b?a:b
    using namespace std;
    int main()
    {
    
    int dp[101][1001],m,T,w[101],val[101],i,j;
    cin>>T>>m;
    for(i=1;i<=m;i++)
    cin>>w[i]>>val[i];
    memset(dp,0,sizeof(dp));
    for(i=1;i<=m;i++)
    for(j=0;j<=T;j++)//j相当于上面说的V-c[i]
    {
    if(j>=w[i])
    dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+val[i]);//放还是不放的选择
    else dp[i][j]=dp[i-1][j];
    }
    cout<<dp[m][T]<<endl;
    return 0;
    }
    

      

  • 相关阅读:
    使网页变灰的代码(包括FLASH等所有网页元素).
    技术面试问题回答
    Spring总结
    IE9插件差不多完成了
    通过dymamic简化Pinvoke调用
    shuffle算法的一种简易实现
    用Reactive Extensions快速实现鼠标手势功能
    编写递归调用的Lambda表达式
    Visual Studio 11 开发者预览版可以下载了
    关于获取所有排列方式的算法
  • 原文地址:https://www.cnblogs.com/locojyw/p/3705173.html
Copyright © 2011-2022 走看看