NC23413 小A买彩票(背包DP)

这是一篇关于解决概率问题的博客,讲述了小A买彩票时如何确保不亏钱的概率。通过使用背包动态规划(DP)算法,计算在每张彩票3元,可能中1, 2, 3, 4元,且概率相等的情况下,买n张彩票不亏钱的方案数。文章介绍了当n<=30时,如何求得分子(不亏情况下所有组合)和分母(所有可能的选择),并给出AC代码实现。" 139349072,7707541,大淘客科技:MySQL到TiDB迁移,性能提升90%的实战,"['数据库', 'MySQL', 'TiDB', '高可用性', '性能优化']

题目链接

题意:
小 A 买 彩 票 , 每 张 彩 票 3 元 小A买彩票,每张彩票3元 A3
可 以 中 奖 1 , 2 , 3 , 4 元 , 概 率 相 同 可以中奖1,2,3,4元,概率相同 1234
问 买 n 张 彩 票 不 亏 的 概 率 问买n张彩票不亏的概率 n
题解:
n < = 30 n<=30 n<=30
题 目 要 求 输 出 分 子 分 母 的 最 简 形 式 题目要求输出分子分母的最简形式
所 以 就 是 求 , 买 n 张 彩 票 的 所 有 情 况 , 和 不 亏 的 情 况 所以就是求,买n张彩票的所有情况,和不亏的情况 n
两 个 分 别 为 分 母 分 子 , 进 行 g c d 输 出 即 可 两个分别为分母分子,进行gcd输出即可 gcd

所 以 只 要 计 算 的 是 不 亏 的 情 况 , 那 么 就 是 n 张 彩 票 最 后 得 到 3 ∗ n 以 上 的 情 况 所以只要计算的是不亏的情况,那么就是n张彩票最后得到3*n以上的情况 n3n
这 个 n 相 当 小 , 直 接 用 背 包 记 录 3 ∗ n 以 上 有 几 种 情 况 这个n相当小,直接用背包记录3*n以上有几种情况 n3n
因 为 彩 票 最 多 能 中 的 情 况 为 全 部 是 4 元 , 即 是 4 ∗ n 因为彩票最多能中的情况为全部是4元,即是4*n 44n
所 以 再 这 个 区 间 里 的 方 案 数 都 是 符 合 的 所以再这个区间里的方案数都是符合的
然 后 进 行 背 包 转 移 然后进行背包转移
d p [ i ] [ j ] 表 示 前 i 张 彩 票 中 了 j 元 的 方 案 数 dp[i][j]表示前i张彩票中了j元的方案数 dp[i][j]ij
d p [ i ] [ j ] = ∑ d p [ i − 1 ] [ j − k ] dp[i][j]=\sum{dp[i-1][j-k]} dp[i][j]=dp[i1][jk]
对 每 种 彩 票 进 行 枚 举 , 彩 票 的 面 值 为 k 对每种彩票进行枚举,彩票的面值为k k
最 后 ∑ 3 ∗ n 4 ∗ n d p [ n ] [ i ] 最后\sum_{3*n}^{4*n}{dp[n][i]} 3n4ndp[n][i]就是分子
分 母 就 是 4 的 n 次 方 , 每 次 有 4 种 选 择 分母就是4的n次方,每次有4种选择 4n4
两 者 g c d 相 除 输 出 即 可 两者gcd相除输出即可 gcd
AC代码

/*
    Author:zzugzx
    Lang:C++
    Blog:blog.youkuaiyun.com/qq_43756519
*/
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define endl '\n'
#define SZ(x) (int)x.size()
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double,double> pdd;
const int mod=1e9+7;
//const int mod=998244353;
const double eps = 1e-10;
const double pi=acos(-1.0);
const int maxn=1e6+10;
const ll inf=0x3f3f3f3f;
const int dir[8][2]={{0,1},{1,0},{0,-1},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};

ll dp[50][200];
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    ll n;
    cin>>n;
    ll N=4*n;
    dp[0][0]=1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=4;j++)
            for(int k=N;k>=j;k--)
                dp[i][k]+=dp[i-1][k-j];
    ll ans=0;
    for(int i=3*n;i<=N;i++)ans+=dp[n][i];
    N=1ll<<(2*n);
    ll x=__gcd(ans,N);
    cout<<ans/x<<'/'<<N/x<<endl;
    return 0;
}

内容概要:本文系统梳理了2025年数学前沿领域的研究动态与发展趋势,涵盖代数几何、数论、微分几何、拓扑学、偏微分方程、数学物理等多个核心方向,并介绍了当前国际数学研究的三大主流趋势:代数几何与数论、分析与偏微分方程、几何拓扑与表示论。文中重点报道了青年数学家王虹成功证明三维挂谷猜想的重大突破,以及韦东奕在偏微分方程与几何分析方面的研究成果,展现了中国数学界的崛起态势。同时,文档还涉及数学基础研究、应用数学、数学教育、期刊评价体系及国际数学强国格局等内容,引用大量视频、文章和权威资源,呈现数学学科的全貌与发展前景。; 适合人群:具备一定数学基础的本科生、研究生及科研工作者,关注数学前沿发展的教师、科技爱好者以及从事人工智能、物理、工程等相关领域并需数学支撑的专业人士。; 使用场景及目标:①了解2025年数学领域的重要突破与研究热点,如挂谷猜想的证明、朗兰兹纲领、拓扑数据分析等;②把握数学各分支的前沿方向与交叉应用,服务于科研选题、学术规划或跨学科研究;③获取权威学习资源与经典文献推荐,辅助数学学习与教学实践。; 阅读建议:此文档为信息聚合型资料,建议结合所列视频、书籍和论文深入拓展学习,重点关注核心突破案例(如王虹、韦东奕)与主流研究方向的演进脉络,宜以批判性思维梳理知识体系,避免碎片化阅读。
### 动态规划中的线性DP背包问题DP #### 线性动态规划的特点及其应用场景 线性动态规划通常用于解决一维数组或列表上定义的问题,在这类问题中,状态仅依赖于前一个或几个连续的状态。这种类型的动态规划非常适合处理具有明显顺序性的数据集。 例如,在求解最长上升子序列(Longest Increasing Subsequence, LIS)时,可以通过构建一个长度为n的一维dp表来记录到当前位置为止的最大LIS长度[^1]: ```python def length_of_LIS(nums): if not nums: return 0 dp = [1]*len(nums) for i in range(len(nums)): for j in range(i): if nums[i]>nums[j]: dp[i]=max(dp[i],dp[j]+1) return max(dp) ``` 此代码片段展示了如何利用线性动态规划的思想去寻找给定整数序列中最长严格递增的子序列长度。 #### 背包问题动态规划的特点及其应用场景 相比之下,背包问题是多维度决策过程的一部分,涉及到物品的选择以及容量限制等因素。这里不仅考虑单一线条上的变化趋势,还需要兼顾不同选项之间的组合可能性。因此,其状态空间往往更加复杂,可能涉及二维甚至更高维度的数据结构来进行表示。 对于经典的0-1背包问题而言,可以采用如下方式实现基于动态规划解决方案: ```python def knapsack(weights, values, capacity): n = len(values) # 创建(n+1)x(capacity+1)大小的记忆化表格并初始化为零 dp = [[0]*(capacity + 1) for _ in range(n + 1)] for i in range(1,n+1): for w in range(1,capacity+1): if weights[i-1]<=w: dp[i][w]=max(dp[i-1][w],values[i-1]+dp[i-1][w-weights[i-1]]) else: dp[i][w]=dp[i-1][w] return dp[n][capacity] ``` 上述Python函数实现了针对特定重量上限条件下最大化价值总和的目标,体现了典型的背包型动态规划的应用场景[^5]。 #### 主要区别总结 | 特征 | 线性动态规划 | 背包问题动态规划 | | --- | --- | --- | | **适用范围** | 处理单一方向上的有序排列问题 | 解决资源分配类问题,特别是当面临多种选择且每种选择都有代价时 | | **状态转移模式** | 基本遵循从前向后的简单迭代更新机制 | 需要考虑当前项是否加入背包,并据此调整后续可用资源量 | | **时间复杂度** | O(n),其中n代表输入规模 | 取决于具体变体;一般情况下介于O(nc)至O(nW),c为成本因子而W则是最大承载能力 | #### 应用实例对比 在线性动态规划方面,除了前面提到过的LIS之外,还有编辑距离(Edit Distance)等问题也属于此类别。而在背包问题领域,则涵盖了诸如分数背包(Fractional Knapsack)、完全背包(Complete Knapsack)等多种变形版本,它们各自有着不同的约束条件和技术细节差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值