zoukankan      html  css  js  c++  java
  • POJ 1276 Cash Machine 多重背包

    题目: http://poj.org/problem?id=1276

    英语实在是硬伤啊,只好去看了下别人的翻译,题意就是说:用不同面值的钱凑出与给定的钱不超过且最接近的钱。

    读完瞬间发现是楼教主的多重背包问题,第一次交上忘了一个判断,WA一次,第二次就A了,很轻松惬意。。

     1 #include <stdio.h>
     2 #include <string.h>
     3 bool dp[1000000];
     4 int c[1000], w[1000];
     5 short cnt[1000000];
     6 int main()
     7 {
     8     int sum, n;
     9     while(scanf("%d %d", &sum, &n) != EOF)
    10     {
    11         for(int i = 0; i < n; i++)
    12         {
    13             scanf("%d %d", &c[i], &w[i]);
    14         }
    15         memset(dp, 0, sizeof(dp));
    16         dp[0] = 1;
    17         for(int i = 0; i < n; i++)
    18         {
    19             memset(cnt, 0, sizeof(cnt));
    20             for(int j = w[i]; j <= sum; j++)
    21             {
    22                 //第一次忘了写!dp[j]了,WA一次。。
    23                 if(!dp[j] && dp[j-w[i]] && cnt[j-w[i]] < c[i])
    24                 {
    25                     dp[j] = 1;
    26                     cnt[j] = cnt[j-w[i]] + 1;
    27                 }
    28             }
    29         }
    30         int ans = sum;
    31         while(!dp[ans])
    32             ans--;
    33         printf("%d
    ", ans);
    34     }
    35     return 0;
    36 }
    View Code
  • 相关阅读:
    HashMap 和HashTable
    两种方式获得键盘录入
    打印流 printStream
    对象操作流--存储对象
    内存输出流
    序列流
    装饰设计模式
    递归
    IO流(使用指定的码表读写字符)
    IO-字符流 练习
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3276308.html
Copyright © 2011-2022 走看看