题意:用3元买一张彩票,等概率获得1,2,3,4元奖品,求买n张不亏本的概率。
思路:dp[j][i]表示买了i张获得的钱,转移方程就是: dp[j][i]=dp[j-1][i-1]+dp[j-2][i-1]+dp[j-3][i-1]+dp[j-4][i-1];
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <stack>
#include <queue>
#include <cmath>
#define ll long long
#define pi 3.1415927
#define inf 0x3f3f3f3f
#define mod 1000000007
using namespace std;
int n,m;
ll dp[130][40];
ll gcd(ll j,ll k)
{
if(!j)
return k;
return gcd(k%j,j);
}
int main ()
{
ll T,i,t,j,k,p,sum=0;
cin>>n;
dp[0][0]=1;
for(i=1;i<=n;++i)
for(j=1;j<=4*i;++j){
if(j>=1)
dp[j][i]+=dp[j-1][i-1];
if(j>=2)
dp[j][i]+=dp[j-2][i-1];
if(j>=3)
dp[j][i]+=dp[j-3][i-1];
if(j>=4)
dp[j][i]+=dp[j-4][i-1];
}
p=0;
for(j=3*n;j<=120;++j)
if(dp[j][n])
p+=dp[j][n];
//for(j=1;j<=10;++j)
//cout<<dp[j][n]<<" ";
sum=pow(4,n);
k=gcd(p,sum);
cout<<p/k<<"/"<<sum/k<<endl;
return 0;
}
京公网安备 11010502036488号