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

    【回溯】邮票问题

    题目描述

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

    输入

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

    输出

    连续面额数的最大值

    样例输入

    4 3
    1 2 4
    

    样例输出

    14

    用price数组记录所组成金额的最小张数
    用已求的(1 - n-1)的price求price【n】
    price[n] = min(price[n - a[i]])
    #include<cstdio>
    #include <iostream>
    #include<cstdlib>
    #include <algorithm>
    using namespace std;
    long long int  h[17];
    const int MAXN = 25600;
    int price[MAXN], a[101];
    int main(){
        int N, M;
        scanf("%d%d", &M, &N);
        for(int i = 0; i < N; i++) scanf("%d", &a[i]);
        sort(a, a+N);
        int cnt = 1;
        price[0] = 0;
        while(true){
            int ans = MAXN;
            for(int i = 0; i < N; i++){
                if(a[i] > cnt){
                    break;
                }
               ans = min(price[cnt - a[i]]+1, ans);
            }
        if(ans > M) {
            printf("%d
    ", cnt-1);
            break;
        }
        price[cnt++] = ans;
       // printf("%d %d
    ", cnt - 1, ans);
        }
        return 0;
    
    }
    View Code
  • 相关阅读:
    单链队列
    栈的顺序存储表示
    顺序队列
    串的定长顺序存储表示
    串的堆分配存储
    双向循环链表
    单循环链表的表示和实现
    串的块链存储表示
    线性表的顺序表示和实现
    线性表的单链表表示和实现
  • 原文地址:https://www.cnblogs.com/cshg/p/5737066.html
Copyright © 2011-2022 走看看