zoukankan      html  css  js  c++  java
  • 采药(01背包)

    -->测评传送门

    题目描述
    辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”

    如果你是辰辰,你能完成这个任务吗?
    输入格式
    第一行有 2 个整数T(1≤T≤1000) 和 M(1≤M≤100) ,用一个空格隔开, TT代表总共能够用来采药的时间, MM代表山洞里的草药的数目。 接下来的 M 行每行包括两个在 1 到 100之间(包括 1 和 100 )的整数,分别表示采摘某株草药的时间和这株草药的价值。
    输出格式
    1 个整数,表示在规定的时间内可以采到的草药的最大总价值。
    样例
    样例输入

    70 3
    71 100
    69 1
    1 2
    样例输出

    3


    非常经典的DP 裸 题,01背包的新手入门

    解析:  

    • 简单来说,枚举每个物品,能塞就塞,关键是要判断用这么多的空间是否可以更新最大价值

     

    一看代码就懂啦:

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    const int N=101,M=1001;
    int w[N],val[N],f[M];
    int main()
    {
        int n,m;
        scanf("%d%d",&m,&n);
        for(int i=1;i<=n;++i)
        scanf("%d%d",&w[i],&val[i]);
        
        for(int i=1;i<=n;++i)
        {
            for(int j=m;j>=w[i];--j)
            {
                f[j]=max(f[j-w[i]]+val[i],f[j]); 
            }
        }
        printf("%d",f[m]);
        return 0;
    }

     二维数组做法:

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int f[1001][1001],w[1001],val[1001];
    
    int main()
    {
        int m,n;
        scanf("%d%d",&m,&n);
        for(int i=1;i<=n;++i){
            scanf("%d%d",&w[i],&val[i]);
        }
        for(int i=1;i<=n;++i)
        {
            for(int j=m;j>0;--j){
                if(w[i]<=j)
                    f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+val[i]);
                else f[i][j]=f[i-1][j];    
            }
        }
        printf("%d",f[n][m]);
        return 0;
    }
    从0到1很难,但从1到100很容易
  • 相关阅读:
    linux文件上传
    ios base64图片上传失败问题
    ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='
    配置SQL Server 2012 AlwaysOn ——step3 配置数据库
    配置SQL Server 2012 AlwaysOn ——step2 建立群集
    配置SQL Server 2012 AlwaysOn ——step1 建立AD域及DNS配置
    适应多场景应用的web系统架构探讨
    住院病案首页数据填写质量规范
    病案首页规范
    vs2015离线使用nuget
  • 原文地址:https://www.cnblogs.com/qseer/p/9427634.html
Copyright © 2011-2022 走看看