LightOJ-1274 Beating the Dataset(期望dp)

el/2023/12/3 3:17:21

I - Beating the Dataset

 LightOJ - 1274 

题意:一个答案文件有n行输出,每行是YES或NO,现在给出文件的总字节数s,YES占3字节,NO占2字节。
要求你输出1个文件,且第一行一定是NO,接下来第i行的内容是答案文件第i-1行的内容,问输出正确行数的期望


题解:期望dp,用逆推。dp[i][j][k]表示当前状态为第i行,已经输出了j个YES,这一行要输出YES(0)/NO(1)
因此可以得出,①如果第i要输出YES,那么i+1行如果输出NO,则i的期望值为i+1的期望值加上+1再乘以输出NO的概率;i+1行如果输出YES,则i的期望值为i+1的期望值乘以输出YES的概率。②如果第i行要输出NO,做法和①相同
递推关系式为dp[i][j][0]=dp[i+1][j+1][0]*p1+(dp[i+1][j][1]+1)*p2
                      dp[i][j][1]=(dp[i+1][j+1][0]+1*p1)*p1+dp[i+1][j][1]*p2
因为不能开5000*5000*2的数组,想到第i位只与第i+1位有关,第一维可以滚动。

#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
const int MX = 5e3 + 5;
double dp[2][MX][2];
int main() {int n, s, T;//  freopen ("in.txt", "r", stdin);scanf ("%d", &T);for (int cas = 1; cas <= T; cas++) {scanf ("%d%d", &n, &s);int yes = s - 2 * n;int no = n - yes;memset (dp, 0, sizeof (dp));double ans = 0;for (int i = n - 1; i >= 0; i--) {int ret = n - i, now = i % 2, nxt = (i + 1) % 2;int Max = min (i, yes), Min = max (0, i - no);     //前i个文件中yes的个数为[Min,Max]memset (dp[now], 0, sizeof (dp[now]));for (int j = Min; j <= Max; j++) {double p1 = 1.0 * (yes - j) / ret, p2 = 1.0 * (no - (i - j)) / ret;dp[now][j][0] = dp[nxt][j + 1][0] * p1 + (dp[nxt][j][1] + 1) * p2;dp[now][j][1] = (dp[nxt][j + 1][0] + 1) * p1 +  dp[nxt][j][1] * p2;}}printf ("Case %d: %.7f\n", cas, dp[0][0][0]);//第一行只能输出YES}return 0;
}




http://www.ngui.cc/el/2314503.html

相关文章

LightOJ-1284 Lights inside 3D Grid (概率计数)

J - Lights inside 3D Grid LightOJ - 1284 题解&#xff1a;概率计数。因为是求期望值&#xff0c;考虑每个点对答案的贡献&#xff1a;对每个点是亮着的概率求和就是所求期望。 那么每个点亮着的概率为多少呢&#xff1f;根据题意&#xff0c;对于点&#xff08;x,y,z&#…

LightOJ-1287 Where to Run(期望dp)

K - Where to Run LightOJ - 1287 题意&#xff1a;有n个城市&#xff0c;编号为0~n-1&#xff0c;有m条有权无向边&#xff0c;有个小偷从编号为0的城市出发&#xff0c;他不会走已经走过的城市&#xff0c; 他有2种决策&#xff1a;①停留在这个城市5分钟&#xff1b;②如果…

LightOJ-1408 Batting Practice(期望推公式)

Q - Batting Practice LightOJ - 1408 题意&#xff1a;每次投球投偏的概率为p&#xff0c;如果连续投中k1次或者连续投偏k2次则投球结束&#xff0c;问投球个数的期望值 题解&#xff1a;数学期望推导公式 设f(x)为连续投偏x次的期望,g(x)为连续投中x次的期望 f(k1)g(k2)0 先…

LightOJ-1395 A Dangerous Maze (II) (期望dp)

P - A Dangerous Maze (II) LightOJ - 1395 题解&#xff1a;期望dp&#xff0c;设正确的门有a个&#xff0c;平均耗时为sum1&#xff0c;错误的门有b个&#xff0c;平均耗时为sum2。 状态转移分2部分&#xff1a; ①当ik时&#xff0c;即已经记住k次走错的门&#xff0c; ②…

LightOJ-1321 Sending Packets(期望+spfa)

M - Sending Packets LightOJ - 1321 题意&#xff1a;给定一张无向图&#xff0c;每条边都有一个通过的概率 &#xff0c;如果无法通过&#xff0c;那么就要回到起点重新出发从起点到终点的时间固定为K&#xff0c;如果成功到达&#xff0c;又需要额外花费K的时间&#xff0c;…

LightOJ-1364 Expected Cards(期望dp)

O - Expected Cards LightOJ - 1364 题解&#xff1a;高维期望dp&#xff0c;dp[i][j][k][s][q][p]表示每种牌分别有i,j,k,s张&#xff0c;Joker的状态分别为q,p时的期望值&#xff0c;用记忆化搜索一下#include<bits/stdc.h> using namespace std; const double eps 1…

LightOJ-1342 Aladdin and the Magical Sticks(期望dp)

N - Aladdin and the Magical Sticks LightOJ - 1342 题解&#xff1a;期望dp。设不可分辨的木棍个数为n1&#xff0c;平均权值为tot1,可分辨的木棍个数为n2&#xff0c;平均权值为tot2 对于dp[i][j]&#xff0c;表示已拿过i个不可分辨的木棍和j个可分辨的木棍&#xff0c;那么…

期望amp;概率dp总结

总算刷完kuangbin期望&概率专题了&#xff0c;下面总结一下心得和题解&#xff01;1.期望dp 期望dp通常逆推&#xff0c;即从结果推向初始状态&#xff0c;也可以用记忆化搜索进行dp&#xff1b; EΣp1*(E1X1)Σp2*(EX2) 其中E为当前状态的期望&#xff0c;E1为下一个状态的…

HDU-4352 XHXJ's LIS(数位dp+状压)

B - XHXJs LIS HDU - 4352 题意&#xff1a;给定一个区间[l,r]&#xff0c;问区间内有多少个数满足&#xff1a;它的每一位上的数字所组成的序列的最长上升子序列的长度恰好是k 题解&#xff1a;数位dp,考虑到最长上升子序列的O(nlogn)的解法&#xff0c;因为只有0~9共10种数字…

HDU-4734 F(x) (数位dp)

H - F(x) HDU - 4734 题解&#xff1a;数位dp&#xff0c;考虑到T很大&#xff0c;不能每次都清空dp数组 一开始想错了&#xff0c;开了3维数组dp[i][tot][sum],表示当前数位是第i位&#xff0c;F(A)tot&#xff0c;到当前数位为止的F(x)的值&#xff0c;结果超内存了。 发现只…