hdu2844 Coins(背包DP)

题目链接
Coins
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 27146 Accepted Submission(s): 9950

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.

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

Source
2009 Multi-University Training Contest 3 - Host by WHU

题意:Tony想要买一个东西,他只有n中硬币每种硬币的面值为a[i]每种硬币的数量为b[i]要买的物品价值不超过m,能有多少种不同的不同总面值的组合方式
思路:采用标记法,dp【j】代表总价值为为j的组合方式存不存在。每次到一个新的面值硬币的时候用vis记录数量不超过b【i】,vis【j】代表组合成总面值为j需要第i枚硬币的数量,ans记录答案。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1;
int n,m,dp[N],vis[N],a[N],b[N];
int main()
{
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        if(n==0&&m==0) break;
        int ans=0;
        for(int i=1;i<=n;++i) scanf("%d",&a[i]);
        for(int i=1;i<=n;++i) scanf("%d",&b[i]);
        for(int i=0;i<N;++i) dp[i]=0;
        dp[0]=1;
        for(int i=1;i<=n;++i)
        {
            memset(vis,0,sizeof(vis));
            for(int j=a[i];j<=m;++j)
            {
                if(!dp[j]&&dp[j-a[i]]&&vis[j-a[i]]<b[i])
                dp[j]=1,vis[j]=vis[j-a[i]]+1,ans++;
            }
        }
        printf("%d\n",ans);
    }
}
发布了391 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/105439939