zoukankan      html  css  js  c++  java
  • 【USACO 3.1】Stamps (完全背包)

    题意:给你n种价值不同的邮票,最大的不超过10000元,一次最多贴k张,求1到多少都能被表示出来?n≤50,k≤200。

    题解:dp[i]表示i元最少可以用几张邮票表示,那么对于价值a的邮票,可以推出dp[j]=min(dp[j],dp[j-a]+1)。j从a到k*10000顺序枚举,因为类似于完全背包。

    http://train.usaco.org/usacoprob2?a=fSgPyIazooa&S=stamps

    /*
    TASK:stamps
    LANG:C++
    */
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define INF 0x3f3f3f3f
    using namespace std;
    int n,k;
    int dp[2000005];
    int main(){
        freopen("stamps.in","r",stdin);
        freopen("stamps.out","w",stdout);
        memset(dp,INF,sizeof dp);
        dp[0]=0;
        scanf("%d%d",&k,&n);
        int a;
        for(int i=1;i<=n;i++){
            scanf("%d",&a);
            for(int j=a;j<=k*10000;j++)
                dp[j]=min(dp[j],dp[j-a]+1);
        }
        for(int i=1;;i++)
            if(dp[i]>k){
                printf("%d
    ",i-1);
                break;
            }
        /*
       Test 1: TEST OK [0.011 secs, 11992 KB]
       Test 2: TEST OK [0.011 secs, 11992 KB]
       Test 3: TEST OK [0.011 secs, 11992 KB]
       Test 4: TEST OK [0.011 secs, 11992 KB]
       Test 5: TEST OK [0.011 secs, 11992 KB]
       Test 6: TEST OK [0.011 secs, 11992 KB]
       Test 7: TEST OK [0.000 secs, 11992 KB]
       Test 8: TEST OK [0.011 secs, 11992 KB]
       Test 9: TEST OK [0.011 secs, 11992 KB]
       Test 10: TEST OK [0.076 secs, 11992 KB]
       Test 11: TEST OK [0.216 secs, 11992 KB]
       Test 12: TEST OK [0.076 secs, 11992 KB]
       Test 13: TEST OK [0.119 secs, 11992 KB]
        */
        return 0;
    }

      

  • 相关阅读:
    关于本博客
    洛谷P3387 【模板】缩点 题解
    spfa学习笔记
    Google Chrome Download
    Kosaraju算法学习
    fhq treap 学习笔记
    OIerChat
    python request.get(h.html),用xpath获取数据为空
    k8s 用ingress暴露集群环境中的服务。
    harbor push 报received unexpected HTTP status: 500 Internal Server Error
  • 原文地址:https://www.cnblogs.com/flipped/p/6075558.html
Copyright © 2011-2022 走看看