# 练习三 Problem T

91人阅读 评论(0)

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>

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：4390次
• 积分：382
• 等级：
• 排名：千里之外
• 原创：36篇
• 转载：0篇
• 译文：0篇
• 评论：0条
文章分类
评论排行