# 练习三 Problem T

Problem Description
Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One day Hibix opened purse 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.<br><br>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

<span style="font-size:14px;color:#996633;">#include<iostream>
#include<string>
#include<cmath>
#include<iomanip>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[100100],w[100100],num[10010],val[10010];
int main()
{
int i,j,k,n,m;
while(cin>>n>>m&&n+m)
{
for(i=0;i<n;i++)
cin>>w[i];
for(i=0;i<n;i++)
cin>>num[i];
k=0;
for(i=0;i<n;i++)
{
j=1;
while(j<=num[i])
{
num[i]-=j;
val[k++]=j*w[i];
j*=2;
}
if(num[i])
val[k++]=num[i]*w[i];
}
memset(dp,0,sizeof(dp));
dp[0]=1;
for(i=0;i<k;i++)
for(j=m;j>=val[i];j--)
if(dp[j-val[i]])
dp[j]=1;
int ans=0;
for(i=1;i<=m;i++)
if(dp[i])
ans++;
printf("%d\n",ans);

}
return 0;
}</span>

• 本文已收录于以下专栏：

举报原因： 您举报文章：练习三 Problem T 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)