• POJ 3040(Allowance)


    题目链接:http://poj.org/problem?id=3040

    题意:将不同面值的金币分成x份,每份的数量至少为c ,  求x的最大值

    思路:1. 面值大于 c 的只能单独为一份;

       2. 优先考虑取出面值较大的;

       3.取出面值较大的后考虑有小到的面值次序取出金币拼凑,直到刚好等于或超过 c ;

       4.直到剩下的金币不能拼凑成 c ;

    ac代码:

    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include <cstdio>
    using namespace std;
    
    int N,C,total=0,temp=0;
    struct Coin{
        int mianzhi;
        int num;
    }coins[25];
    
    bool Cmp(const Coin& a,const Coin& b){
        return a.mianzhi>b.mianzhi;
    }
    
    int main(void){    
        cin>>N>>C;
        for(int i=0;i<N;i++){
            scanf("%d%d",&coins[i].mianzhi,&coins[i].num);
            // getchar();
        }
        sort(coins,coins+N,Cmp);
    
        // 选出面值大于或等于C的
        for(int i=0;i<N;i++){
            if(coins[i].mianzhi>=C){
                total+=coins[i].num;
                temp=i+1;
            }
            else    break;
        }
    
        // temp++;
        while(1){
            int now=0;
            for(int i=temp;i<N;i++){
                while(coins[i].num>0&&now+coins[i].mianzhi<=C){
                    now+=coins[i].mianzhi;
                    coins[i].num--;
                }
            }    
            for(int i=N-1;i>=temp;i--){
                while(now<C&&coins[i].num){
                    coins[i].num--;
                    now+=coins[i].mianzhi;
                }
            }
            if(now<C)
                break;
            total++;        
        }
        cout<<total<<endl;
    
        return 0;
    }
    View Code
  • 相关阅读:
    Java 泛型 泛型的约束与局限性
    Java 泛型 泛型方法
    Java 泛型 泛型数组
    Java 泛型 协变性、逆变性
    Java 泛型 协变式覆盖和泛型重载
    Java 泛型 泛型代码和虚拟机
    Insertion Sort List
    Remove Duplicates from Sorted List II
    String to Integer (atoi)
    SpringMvc源码入门
  • 原文地址:https://www.cnblogs.com/jaszzz/p/12563227.html
Copyright © 2020-2023  润新知