কিছু কয়েন দেওয়া থাকবে আর একটা নাম্বার দেওয়া থাকবে (K)
কাজ হবে ওই কয়েন গুলো দিয়ে নাম্বার টা বানানো যেখানে একটা কয়েন K বার ইউজ করা যাবে
এইরকম ভাবে কয়বার বানানো যাবে
#include <bits/stdc++.h>
using namespace std;
#define MOD 100000007
long long dp[10100];
int coin[200];
int n,k;
int main()
{
int t,cas=0;
cin>>t;
while(t--)
{
dp[0]=1;
cin>>n>>k;
for(int i=0; i<n; i++)
cin>>coin[i];
for(int i=0; i<n; i++)
for(int j=1; j<=k; j++)
if(coin[i]<=j)
dp[j]=(dp[j]+dp[j-coin[i]])%MOD;
cout<<"Case "<<++cas<<": "<<dp[k]<<endl;
for(int i=0; i<=k; i++)
dp[i]=0;
}
return 0;
}
কাজ হবে ওই কয়েন গুলো দিয়ে নাম্বার টা বানানো যেখানে একটা কয়েন K বার ইউজ করা যাবে
এইরকম ভাবে কয়বার বানানো যাবে
For example, suppose there are three coins 1, 2, 5. Then if K = 5 the possible ways are:
11111
1112
122
5
তাহলে ৪ ভাবে বানাতে পারবো
Problem link: http://lightoj.com/volume_showproblem.php?problem=1232#include <bits/stdc++.h>
using namespace std;
#define MOD 100000007
long long dp[10100];
int coin[200];
int n,k;
int main()
{
int t,cas=0;
cin>>t;
while(t--)
{
dp[0]=1;
cin>>n>>k;
for(int i=0; i<n; i++)
cin>>coin[i];
for(int i=0; i<n; i++)
for(int j=1; j<=k; j++)
if(coin[i]<=j)
dp[j]=(dp[j]+dp[j-coin[i]])%MOD;
cout<<"Case "<<++cas<<": "<<dp[k]<<endl;
for(int i=0; i<=k; i++)
dp[i]=0;
}
return 0;
}
কোন মন্তব্য নেই:
একটি মন্তব্য পোস্ট করুন