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;
    }

      

  • 相关阅读:
    美化的滚动条
    网站系统开发参考网址
    正则表达式获取URL参数
    类实例 及 实例化对象 对象引用
    C# 静态方法 静态属性 调用静态方法
    C# 静态方法调用非静态方法
    winform 窗体间传值
    从数据库中读出数据并输出
    数据库链接字符串
    DbHelper
  • 原文地址:https://www.cnblogs.com/flipped/p/6075558.html
Copyright © 2011-2022 走看看