题意:略

题记:
dp[i][j]表示前i张彩票能组成总金额为j元的方案数
第i张彩票有1,2,3,4元四种选择,所以总金额为j的情况可以由四种情况转移过来。
dp[i][j]=dp[i-1][j-1]+dp[i-1][j-2]+dp[i-1][j-3]+dp[i-1][j-4];

总方案数是4的n次方种,所有方案数中总金额大于等于3*n的就是不亏本的,将数量记录下来,最后将两个数约分之后输出即可。

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N=200;
ll dp[N][N];
//dp[i][j]表示前i张彩票能组成总金额为j元的方案数

ll qpow(ll a,ll b){//快速幂
    ll sum=1;
    while(b){
        if(b&1)sum=sum*a;
        b>>=1;
        a=a*a;
    }
    return sum;
}

ll gcd(ll a,ll b){
    while(b){
        ll t=a%b;
        a=b;
        b=t;
    }
    return a;
}

int main(){
    ll n;
    cin>>n;
    //dp[1][1]=dp[1][2]=dp[1][3]=dp[1][4]=1;
    dp[0][0]=1;
    for(int i=1;i<=n;i++)
        for(int j=i;j<=i*4;j++)
            dp[i][j]=dp[i-1][j-1]+dp[i-1][j-2]+dp[i-1][j-3]+dp[i-1][j-4];
    ll ans=0;
    ll sum=qpow(4,n);//总方案数
    for(int i=3*n;i<=4*n;i++)
        ans+=dp[n][i];
    ll g=gcd(ans,sum);//求出最大公因子
    cout<<ans/g<<'/'<<sum/g<<endl;
    return 0;
}