//总共T时间,相邻歌曲类型不相同,有多少种组合方式,n < 15
// dp[k][i],k某状态,i最后结尾为i格式
const int mod = 1e9 + 7;
int t[22],g[22],dp[MAXN][4];
signed main()
{
int n,T;cin>>n>>T;
rep(i,n) cin>>t[i]>>g[i];
dp[0][0]=1;
ll cnt=0;
for(int i = 0 ; i<(1<<n);++i)
{
for(int k=0;k<4;++k)
{
for(int j=0;j<n;++j)
{
if(((i & (1 << j)) == 0) && g[j]!=k)
dp[i|(1<<j)][g[j]] = (dp[i|(1<<j)][g[j]] + dp[i][k])%mod;
}
int sum = 0;
for(int k = 0; k < n; k ++) if((i & (1 << k)) != 0) sum += t[k];
if(sum == T)
{
cnt += dp[i][k];
cnt %= mod;
}
}
}
cout<<cnt<<endl;
return 0;
}
07-07
07-08
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交