zoukankan      html  css  js  c++  java
  • 邮票问题

    邮票问题

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 15  解决: 7
    [提交][状态][讨论版]

    题目描述

    设有已知面额的邮票m种,每种有n张。问:用总数不超过n张的邮票进行组合,能组合的邮票中可以连续出现面额数最多有多少(1<=m<=100,1<=n<=100,1<=邮票面额<=255)

    输入

    第一行:n和m的值,中间有一空格隔开
    第二行:m种邮票的面额,每个数中间用一空格隔开。

    输出

    连续面额数的最大值

    样例输入

    4 3
    1 2 4
    

    样例输出

    14

    用动态规划做的,f[i]表示邮票面值为i时需要最少的邮票张数
    #include <iostream>
    #include <algorithm>
    #define INF 0x3f3f3f3f
    using namespace std;
    int f[25555]={0},a[105],m,n;
    
    int main()
    {
        cin>>n>>m;
        for(int i=0;i<25555;i++)
            f[i]=INF;
        for(int i=0;i<m;i++)
            cin>>a[i];
        sort(a,a+m);
        f[0]=0;
        for(int i=a[0];i<=a[m-1]*n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(i>=a[j])
                    f[i]=min(f[i],f[i-a[j]]+1);
            }
        }
        int maxx=0,ans=0;
        for(int i=1;i<=a[m-1]*n;i++)
        {
            if(f[i]<=n)
            {
                ans++;
            }
            else
            {
                maxx=max(ans,maxx);
                ans=0;
            }
        }
    
        cout<<maxx<<endl;
        return 0;
    }
    View Code
     
  • 相关阅读:
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven
    Maven教程
    SASS
  • 原文地址:https://www.cnblogs.com/asuml/p/5752430.html
Copyright © 2011-2022 走看看