动态规划-概率dp
-
小A最近开始沉迷买彩票,并且希望能够通过买彩票发家致富。已知购买一张彩票需要3元,而彩票中奖的金额分别为1,2,3,4元,并且比较独特的是这个彩票中奖的各种金额都是等可能的。现在小A连续购买了n张彩票,他希望你能够告诉他至少能够不亏本的概率是多少。
-
题目分析dp[i][j]表示前i张彩票中奖的金额为j的方案数(概率dp中常见的状态方法),即转移方程
dp[i][j] = dp[i-1][j-1]+dp[i-1][j-2]+dp[i-1][j-3]+dp[i-1][j-4]
最后计算ans = sum(dp[n][i])(i>=3n&&i<=4n)即为不亏本的方案数,总方案数为4^n,最后输出ans/sum的最简分数几个
点击查看代码
#include<bits/stdc++.h>
#define pb push_back
#define ll long long
#define mod 1e9+7
using namespace std;
ll dp[31][121]={0};//表示赚的数目
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
// IOS
dp[0][0]=1;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=4*n;j++)
{
if(j-1>=0)
dp[i][j]+=dp[i-1][j-1];
if(j-2>=0)
dp[i][j]+=dp[i-1][j-2];
if(j-3>=0)
dp[i][j]+=dp[i-1][j-3];
if(j-4>=0)
dp[i][j]+=dp[i-1][j-4];
}
}
ll a=0;
for(int i=n*3;i<=121;i++)
a+=dp[n][i];
ll b=pow(4,n);
ll c=a/gcd(a,b);
ll d=b/gcd(a,b);
printf("%lld/%lld\n",c,d);
return 0;
}
分类:
概率dp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】