NC23413 小A买彩票(概率dp)

相当于一个背包问题,设计状态为f[i][j]表示前i个,达到j元的方案,这样记住合法的方案之后除非法方案即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=3e7+10;
const int mod=1e9+7;
ll f[40][210];
int main(){
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    int i,j;
    f[0][0]=1;
    for(i=1;i<=n;i++){
        for(j=0;j<=120;j++){
            if(j>=1)  f[i][j]+=f[i-1][j-1];
            if(j>=2)  f[i][j]+=f[i-1][j-2];
            if(j>=3)  f[i][j]+=f[i-1][j-3];
            if(j>=4)  f[i][j]+=f[i-1][j-4];
        }
    }
    ll ans=0;
    for(i=3*n;i<=4*n;i++){
        ans+=f[n][i];
    }
    ll sum=1ll<<(n<<1);
    cout<<ans/__gcd(ans,sum)<<"/"<<sum/__gcd(ans,sum)<<endl;
    return 0;
}
View Code

 

posted @ 2021-02-11 22:03  朝暮不思  阅读(51)  评论(0编辑  收藏  举报