• BZOJ 1531 POI2005 Bank notes


    1531: [POI2005]Bank notes

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 669  Solved: 366
    [Submit][Status][Discuss]

    Description

    Byteotian Bit Bank (BBB) 拥有一套先进的货币系统,这个系统一共有n种面值的硬币,面值分别为b1, b2,..., bn. 但是每种硬币有数量限制,现在我们想要凑出面值k求最少要用多少个硬币.

    Input

    第一行一个数 n, 1 <= n <= 200. 接下来一行 n 个整数b1, b2,..., bn, 1 <= b1 < b2 < ... < b n <= 20 000, 第三行 n 个整数c1, c2,..., cn, 1 <= ci <= 20 000, 表示每种硬币的个数.最后一行一个数k – 表示要凑的面值数量, 1 <= k <= 20 000.

    Output

    第一行一个数表示最少需要付的硬币数

    Sample Input

    3
    2 3 5
    2 2 1
    10

    Sample Output

    3

    HINT

    Source

    单调队列优化多重背包  是个裸题

    /**************************************************************
        Problem: 1531
        User: zhangenming
        Language: C++
        Result: Accepted
        Time:688 ms
        Memory:1680 kb
    ****************************************************************/
     
    #include <bits/stdc++.h>
    #define ll long long
    #define inf 1e9+10
    #define mod 10000
    using namespace std;
    inline int read(){
         
        int x=0;int f=1;char ch=getchar();
        while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
        while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    const int MAXN=2e4+10;
    int n,b[MAXN],c[MAXN],f[MAXN],m,q[MAXN],head,tail,w[MAXN];
    int main(){
        n=read();memset(f,10,sizeof(f));
        for(int i=1;i<=n;i++) b[i]=read();
        for(int i=1;i<=n;i++) c[i]=read();
        m=read();f[0]=0;
        for(int i=1;i<=n;i++){
            for(int j=0;j<b[i];j++){
                head=1,tail=0;
                for(int k=j;k<=m;k+=b[i]){
                    while(head<=tail&&(k-w[head])/b[i]>c[i]) head++;
                    while(head<=tail&&(f[k]-(k-w[tail])/b[i])<=q[tail]) tail--;
                    q[++tail]=f[k];
                    w[tail]=k;
                    f[k]=min(f[k],q[head]+(k-w[head])/b[i]);
                }
            }
        }
        printf("%d",f[m]);
        return 0;
    }
    
    

      

  • 相关阅读:
    Shortest path of the king
    二分查找c++简单模板
    2017广东工业大学程序设竞赛B题占点游戏
    2017广东工业大学程序设竞赛C题爬楼梯
    2017广东工业大学程序设竞赛E题(倒水)
    p1250 种树 贪心
    P1248 加工生产调度 贪心
    P1209 [USACO1.3]修理牛棚 Barn Repair 贪心
    P1607 [USACO09FEB]庙会班车Fair Shuttle 贪心
    P2602 [ZJOI2010]数字计数 数位dp
  • 原文地址:https://www.cnblogs.com/something-for-nothing/p/9426883.html
Copyright © 2020-2023  润新知