zoukankan      html  css  js  c++  java
  • C

    C - Coin Change (III)
    Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu

    Description

    In a strange shop there are n types of coins of value A1, A2 ... AnC1, C2, ... Cn denote the number of coins of value A1, A2 ... Anrespectively. You have to find the number of different values (from 1 to m), which can be produced using these coins.

    Input

    Input starts with an integer T (≤ 20), denoting the number of test cases.

    Each case starts with a line containing two integers n (1 ≤ n ≤ 100), m (0 ≤ m ≤ 105). The next line contains 2n integers, denoting A1, A2... An, C1, C2 ... Cn (1 ≤ Ai ≤ 105, 1 ≤ Ci ≤ 1000). All Ai will be distinct.

    Output

    For each case, print the case number and the result.

    Sample Input

    2

    3 10

    1 2 4 2 1 1

    2 5

    1 4 2 1

    Sample Output

    Case 1: 8

    Case 2: 4

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 using namespace std;
     5 #define mod 100000007
     6 int a[1001],c[101],dp[100001],b[101];
     7 int main()
     8 {
     9     int n,k,t,i,j,r;
    10     scanf("%d",&t);
    11     for(i=1; i<=t; i++)
    12     {
    13         memset(dp,0,sizeof(dp));
    14         scanf("%d%d",&n,&k);
    15         for(j=1; j<=n; j++)scanf("%d",&b[j]);
    16         for(j=1; j<=n; j++)scanf("%d",&c[j]);
    17         int nu=0,re,rs;
    18         for(j=1; j<=n; j++)
    19         {
    20             re=b[j],rs=c[j];
    21             c[j]*=b[j];
    22             while(rs)
    23             {
    24                 if(re<c[j])
    25                     a[nu++]=re,c[j]-=re;
    26                 else a[nu++]=c[j];
    27                 rs>>=1;
    28                 re<<=1;
    29             }
    30         }
    31         for(j=0; j<nu; j++)
    32         {
    33             for(r=k; r>=0; r--)
    34             {
    35                 if(dp[r]&&r+a[j]<=k)
    36                     dp[r+a[j]]=1;
    37                 if(r==0&&a[j]<=k)
    38                     dp[a[j]]=1;
    39             }
    40 
    41         }
    42         int sum=0;
    43         for(r=0; r<=k; r++)sum+=dp[r];
    44         cout<<"Case "<<i<<": ";
    45         cout<<sum<<endl;
    46     }
    47 
    48 }
    View Code
  • 相关阅读:
    Linux下mysql的自动定时备份
    javaweb面试题
    java面试题
    Web应用优化之nginx+tomcat集群配置+redis管理session
    Web应用系统通常可以经过哪些层面的优化
    HBase安装
    博客园所有文章字数统计
    Python生成器
    Python列表生成式
    直方图均衡化-Python实现
  • 原文地址:https://www.cnblogs.com/ERKE/p/3582219.html
Copyright © 2011-2022 走看看