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

    Coins

    Time Limit: 3000MS Memory Limit: 30000K
    Total Submissions: 48194 Accepted: 16209

    Description

      People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar.One day Tony opened his money-box and found there were some coins.He decided to buy a very nice watch in a nearby shop. He wanted to pay the exact price(without change) and he known the price would not more than m.But he didn't know the exact price of the watch. 
      You are to write a program which reads n,m,A1,A2,A3...An and C1,C2,C3...Cn corresponding to the number of Tony's coins of value A1,A2,A3...An then calculate how many prices(form 1 to m) Tony can pay use these coins. 

    Input

      The input contains several test cases. The first line of each test case contains two integers n(1<=n<=100),m(m<=100000).The second line contains 2n integers, denoting A1,A2,A3...An,C1,C2,C3...Cn (1<=Ai<=100000,1<=Ci<=1000). The last test case is followed by two zeros.

    Output

       For each test case output the answer on a single line.

    Sample Input

    3 10
    1 2 4 2 1 1
    2 5
    1 4 2 1
    0 0

    Sample Output

    8
    4

    题意:有n种钱币,每种有个,价值为,求这些钱币能凑出多少种小于等于m的金额。

    题解:男人八题之一怎么可能用直接的多重背包就能解决。此题数据范围较大,多重背包会TLE。dp[i]不应该记录容量为i的背包最多能装多少,而应该记录是否能达到容量i。

    代码:
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<vector>
    using namespace std;
    const int maxn=100005;
    int num[maxn],w[maxn],flag[maxn],cnt[maxn];
    int main()
    {
       int i,j,n,m,ans;
       while(~scanf("%d%d",&n,&m))
       {
        if(!n&&!m) break;
        {
         fill(flag,flag+maxn,0);
         flag[0]=1;
         ans=0;
        }
        for(i=1;i<=n;i++) scanf("%d",&w[i]);
        for(i=1;i<=n;i++) scanf("%d",&num[i]);
        for(i=1;i<=n;i++)
        {
         fill(cnt,cnt+maxn,0);
         for(j=w[i];j<=m;j++)
           if(!flag[j]&&flag[j-w[i]]&&cnt[j-w[i]]+1<=num[i])
            {
              ans++;
              flag[j]=1;
              cnt[j]=cnt[j-w[i]]+1;
            }
        }
        printf("%d
    ",ans);
       }
       return 0;
    }
    本博客仅为本人学习,总结,归纳,交流所用,若文章中存在错误或有不当之处,十分抱歉,劳烦指出,不胜感激!!!
  • 相关阅读:
    基于spring mvc的图片验证码实现
    spring mvc controller间跳转 重定向 传参
    fedora23安装配置记录
    Qt移动开发大部分的场景基本上实现没问题,listview支持刷新3000~5000的实时数据没有任何压力(QML的几个大型应用)
    经过了这么多年的发展,软件开发行业已经完全渗入了整个社会
    Qt云服务/云计算平台QTC(Qt Cloud Services)入门(0)
    Windows下用VC与QT编译MPI程序入门
    VS2008下QT整合OGRE
    表现层及ASP.NET MVC介绍(二)
    DDD分层架构的进化
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/11359071.html
Copyright © 2011-2022 走看看