AI 生成摘要
该博客分享了参加某次编程竞赛时,遇到一道投掷硬币的连续奖励问题的经历。原题描述不清,导致博主一度误解题意。问题要求实现动态规划,使用二维数组$f[i][j]$表示投掷到第$i$次、连续$j$次正面的最大收益。状态转移方程考虑了不保留连续性或保留连续性两种情况,时间复杂度为$O(n^2)$,空间也类似。博主提供的代码巧妙处理了输入,并通过双层循环实现了状态转移,成功得到答案。
题意解毒
首先解决连续奖励的输入。
原题目中的表述很迷,导致我看了半天还以为是连续 i 次正面就奖励,代码调了半天没出来,然后直接划过去做后面一题了。
可以使用这种方式 cin >> c >> y[c],$y[i]$ 表示连续抛 $i$ 个正面的奖励。
思路
使用动态规划,设 $f[i][j]$ 为扔到第 $i$ 次时,连续扔 $j$ 次正面的最大收益,那么状态转移方程为:
$$ f[i][0] = \max_{j = 0}^{i - 1} f[i - 1][j]$$
$$ f[i][j] = f[i - 1][j - 1] + x[i] + y[j]$$
时间复杂度 $O(n^2)$,空间复杂度 $O(n^2)$,注意开 long long
然后直接看代码吧
AC 代码
1 | |