zoukankan      html  css  js  c++  java
  • POJ 1742 Coins

    其实跟这个很像UVA的一个coins,但是那个是对每个硬币的使用次数没有限制,这次对这个有限制了。

    这个限制怎么去破他,我想了好久好久。最终,还是没想出来,悲剧。后来网上搜了一下,发现这题还是楼教主的“男人不容易”系列中“男人八题”里的最简单的一道。 悲催了。

    记录面值的话,每个面值搜过去就是了。但是这个次数的限制,就需要用另外一种状态去表示他了。

    最核心的就是这个式子:if(used[j-a[i]]<c[i])  used[j]=used[j-a[i]]+1

    贴代码:

    View Code
     1 #include <iostream>
     2 #include <cstring>
     3 using namespace std;
     4 int dp[100010],used[100010],a[110],c[110];
     5 int main()
     6 {
     7     int n,m,i,j;
     8     while(cin>>n>>m)
     9     {
    10         if(n == 0 && m == 0)
    11             break;
    12         for(i = 1;i <= n;i++)
    13             cin>>a[i];
    14         for(i = 1;i <= n;i++)
    15             cin>>c[i];
    16         memset(dp,0,sizeof(dp));
    17         dp[0] = 1;
    18         for(i = 1;i <= n;i++)
    19         {
    20             memset(used,0,sizeof(used));
    21             for(j = 1;j <= m;j++)
    22             {
    23                 if(j - a[i] >= 0 && !dp[j] && dp[j - a[i]] && used[j - a[i]] < c[i])
    24                 {
    25                     dp[j] = 1;
    26                     used[j] = used[j - a[i]] + 1;
    27                 }
    28             }
    29         }
    30         int sum = 0;
    31         for(i = 1;i <= m;i++)
    32             if(dp[i])
    33                 sum++;
    34         cout<<sum<<endl;
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    原来 是 需要的,
    传说中的 拉伸,
    date + 排序,
    两个 header,
    招财铃,负责模块,
    一个字母,
    一个词,
    vue+webpack静态资源路径引用
    Webstorm 的 Tab 键调整缩进值
    ES6常用语法
  • 原文地址:https://www.cnblogs.com/zhexipinnong/p/2455452.html
Copyright © 2011-2022 走看看