
LightOJ - 1232
By: a guest on
Aug 8th, 2012 | syntax:
C++ | size: 2.31 KB | hits: 12 | expires: Never
#include <algorithm>
#include <bitset>
#include <cctype>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#include <iomanip>
/*** typedef ***/
#define MEMSET_INF 127
#define MEMSET_HALF_INF 63
#define stream istringstream
#define rep(i,n) for(__typeof(n) i=0; i<(n); i++)
#define repl(i,n) for(__typeof(n) i=1; i<=(n); i++)
#define FOR(i,a,b) for(__typeof(b) i=(a); i<=(b); i++)
#define INF (1<<30)
#define PI acos(-1.0)
#define pb push_back
#define ppb pop_back
#define all(x) x.begin(),x.end()
#define mem(x,y) memset(x,y,sizeof(x))
#define memsp(x) mem(x,MEMSET_INF)
#define memdp(x) mem(x,-1)
#define memca(x) mem(x,0)
#define eps 1e-9
#define pii pair<int,int>
#define pmp make_pair
#define ft first
#define sd second
#define pf printf
#define sf scanf
#define vi vector<int>
#define vpii vector<pii>
#define si set<int>
#define msi map<string , int >
typedef long long i64;
typedef unsigned long long ui64;
/** function **/
#define SDi(x) sf("%d",&x)
#define SDl(x) sf("%lld",&x)
#define SDs(x) sf("%s",x)
#define SD2(x,y) sf("%d%d",&x,&y)
#define SD3(x,y,z) sf("%d%d%d",&x,&y,&z)
using namespace std;
#define READ(f) freopen(f, "r", stdin)
#define WRITE(f) freopen(f, "w", stdout)
#define mod 100000007
int coin[60],limit[60];
int make;
int con;
long long dp[10010][110];
bool vis[10010][110];
int call(int amount,int idx)
{
if(idx>con)
{
if(amount==make) return 1;
return 0;
}
if(amount>make) return 0;
if(amount==make) return 1;
if(vis[amount][idx]) return dp[amount][idx];
else vis[amount][idx]=true;
int ret1=0,ret2=0;
ret1+=call(amount+coin[idx],idx)%mod;
ret2+=call(amount,idx+1)%mod;
return dp[amount][idx]=(ret1+ret2)%mod;
}
int main()
{
READ("in.txt");
int tc,cas=1;
cin>>tc;
while(tc--)
{
pf("Case %d: ",cas++);
SD2(con,make);
repl(i,con)
SDi(coin[i]);
mem(vis,false);
int ans = call(0,1);
pf("%d\n",ans%mod);
}
return 0;
}