1 条题解

  • 0
    @ 2025-8-24 21:40:52

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 「QQ红包」
    **

    搬运于2025-08-24 21:40:52,当前版本为作者最后更新于2017-07-04 15:37:18,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    完全背包,然后从头搜就可以了,

    具体见代码

    /*
    ID: redbag
    PROG: stamps 
    LANG: C++     
    */
    #include<set>  
    #include<map>  
    #include<list>  
    #include<queue>  
    #include<stack>  
    #include<string>  
    #include<math.h>  
    #include<time.h>  
    #include<vector>  
    #include<bitset>  
    #include<memory>  
    #include<utility>  
    #include<stdio.h>  
    #include<sstream>  
    #include<iostream>  
    #include<stdlib.h>  
    #include<string.h>  
    #include<algorithm> 
    #define LL unsigned long long   
    using namespace std;
    int k,n,i,j,s,a;//k:总共消耗的邮票数 
    int f[2000000];//f[i]表示构成面值为i至少需要的邮票数 
    int main() 
    {
        scanf("%d%d",&k,&n);
        for (i=1;i<=2000000;i++) f[i]=2333;//标记
        f[0]=0;//赋初值 ,用0张邮票可以构成0
        for (i=1;i<=n;i++)
        {
            scanf("%d",&a);//读入 
            for (j=a;j<=2000000;j++)
            if (f[j-a]+1<=k)//用的邮票数目在范围内 
                f[j]=min(f[j],f[j-a]+1);//取较小的 
        } 
        s=0;
        for (i=1;i<=2000000;i++)//找从1开始 连续 的能取的集合的最后一个。 
            if (f[i]==2333)//凑不出了 
            {
                s=i-1;//记录 
                break;//退出 
            }
        printf("%d\n",s);//输出 
        return 0;
    }
    
    • 1

    信息

    ID
    1755
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者