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; }
没有人不辛苦,只有人不喊疼