2017浙江工业大学-校赛决赛 XiaoWei的战斗力

Description

XiaoWei沉迷RPG无法自拔,但是他的战斗力只有5,所以他决定氪金提升战斗力。
XiaoWei购买了n个福袋。打开1个福袋后,有以下三种情况出现:
1.获得屠龙宝刀,概率为p1;
2.获得火麒麟,概率为p2;
3.什么都没获得,概率为1-p1-p2;
已知每把屠龙宝刀能够使战斗力*2,每把火麒麟能够使战斗力*1.5。XiaoWei虽然初始战斗力很弱,但是潜力无限,可以装备任意数量的屠龙宝刀和火麒麟,并且效果可以叠加。XiaoWei想知道,打开n个福袋后并装备武器后,他的战斗力期望是多少?

Input

第一行只包含一个整数T(1≤T≤100),表示有T组数据。
对于每组数据,包含1个整数n(1≤n≤20),和2个浮点数p1和p2(0≤p1,p2≤1 且 0≤p1+p2≤1)。

Output

对于每组数据,输出一行结果。
输出格式为“Case #x: y”,x表示数据组数(从1开始),y表示答案。
y以科学计数法输出,保留三位有效数字。

Sample Input

3
1 0.5 0.5
2 1 0
20 0 0

Sample Output

Case #1: 8.75e+00
Case #2: 2.00e+01
Case #3: 5.00e+00解法:dp[i][j][k] i表示第i个福袋,收到j个屠龙宝刀,收到k个火麒麟,以及本身的什么都没有收到就是dp[i][j][k]=(dp[i-1][j][k]*(1-p1-p2)+dp[i-1][j-1][k]*p1+dp[i-1][j][k-1]*p2)接下来就是把期望算一算就行
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <string>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <cmath>
 7 #include <queue>
 8 #include <vector>
 9 #include <set>
10 #include <bitset>
11 #include <stack>
12 #include <map>
13 #include <climits>
14 #include <functional>
15
16 using namespace std;
17
18 #define LL long long
19 const int INF=0x3f3f3f3f;
20
21 double dp[25][25][25],p1,p2;
22
23 int main()
24 {
25     int n,t,cas=0;
26     scanf("%d",&t);
27     while(t--)
28     {
29         scanf("%d%lf%lf",&n,&p1,&p2);
30         memset(dp,0,sizeof dp);
31         dp[0][0][0]=1;
32         for(int i=1; i<=n; i++)
33         {
34             for(int j=0; j<=n; j++)
35             {
36                 for(int k=0; k<=n; k++)
37                 {
38                     dp[i][j][k]=dp[i-1][j][k]*(1-p1-p2);
39                     if(j) dp[i][j][k]+=dp[i-1][j-1][k]*p1;
40                     if(k) dp[i][j][k]+=dp[i-1][j][k-1]*p2;
41                 }
42             }
43         }
44         double ans=0;
45         for(int i=0; i<=n; i++)
46         {
47             for(int j=0; j<=n; j++)
48             {
49                 double t=5;
50                 for(int k=1;k<=i;k++) t=t*2;
51                 for(int k=1;k<=j;k++) t=t*1.5;
52                 ans+=t*dp[n][i][j];
53             }
54         }
55         printf("Case #%d: %.2e\n",++cas,ans);
56     }
57     return 0;
58 }  
时间: 2024-08-04 04:32:15

2017浙江工业大学-校赛决赛 XiaoWei的战斗力的相关文章

2017浙江工业大学-校赛决赛 竹之书

Description 由于某些原因菲莉丝拿到了贤者之石,所以好像变得很厉害了好像变得很厉害的菲莉丝想要炼成幻想乡,其中有一个原料是稗田一族对幻想乡历史的记录.现在菲莉丝拿到了一个被某只魔粘性精神体加密过的的卷轴.密文通过原文和一个正整数key加密形成,而key和密文又有一定关联.现给出密文,求key值 已知密文s和key值关系如下已知密文s是一串正整数s1,s2,s3--sn,A为s中所有元素的和,B为s中所有元素的积,key为B mod A 数据范围si,A在(0,1e17]范围内0<n<

2017浙江工业大学-校赛决赛 小马哥和数列

Description 小马哥是个追求完美的人,现在给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美的,现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列. Input 多组数据.输入第一行给出两个正整数N和p,其中N(<= 10^5)是输入的正整数的个数,p(<= 10^9)是给定的参数.第二行给出N个正整数,每个数不超过10^9. Output 在一行中输出最多可以选择多少个数可以用它们组成一个完美数

2017浙江工业大学-校赛决赛 猜猜谁是我

Description 女神YSJ给Martin发了一个视频."猜猜里面哪个是我." 女神说.作为一个脸盲,再加上多年不见,Martin已经完全不知道女神长成了什么样子,他表示完全认不出来.好在Martin手上还有一张YSJ小时候的照片,他可以拿照片和视频里的人进行特征比对,从而找出女神.为了简化问题,我们将YSJ小时候的脸表示成一个800行800列的矩阵,然后给出眼睛.鼻子.嘴巴的中心在脸上的坐标,全部用整数表示.视频中的其他人也都按照这个方式表示,截取正脸并且缩放到800x800以

2017浙江工业大学-校赛决赛 小M和天平

Description 小M想知道某件物品的重量,但是摆在他面前的只有一个天平(没有游标)和一堆石子,石子可以放左边也可以放右边.他现在知道每个石子的重量.问能不能根据上述条件,能不能测出所问的重量. Input 第一行T(1≤T≤100),表示T组数据.接下来T组数据:接下来第一行一个数N,表示石子个数.(1≤N≤100)接下来第二行N个数,表示石子的重量.(1≤w_i≤100)接下来第三行一个数M,表示询问个数.(1≤M≤100)接下来M行每行一个数k,表示一个询问. Output 对于每组

2017浙江工业大学-校赛决赛 BugZhu抽抽抽!!

Description 当前正火的一款手游阴阳师又出新式神了,BugZhu十分想要获得新出的式神,所以他决定花光所有的积蓄来抽抽抽!BugZhu经过长时间的研究后发现通过画三角外接圆能够提高获得该式神的概率,即如下图所示的图形: 高超的数学天分给予了BugZhu神一般的洞察力,BugZhu还发现当图中阴影部分的面积处在[l,r]之间时,他能够获得最高的概率.BugZhu现在画好了符,他能不能获得最高概率呢? Input 不超过100组数据每组数据第一行给出l和r(l,r均在double范围内).

2017广东工业大学程序设计竞赛决赛-tmk买礼物

tmk买礼物 Description 今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下. TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK说:“恭喜你成为了本店第2147483647位顾客,本店在搞一个活动,对本店第2147483647位顾客进行赠送活动.你先看看你有多少钱?” TMK一摸口袋,发现只有n个硬币,每个硬币的价值为a[i]. 然后店主继续说:“现在你用你的钱凑一些数,如果你的钱能凑成[0,x]里面所有的数,那么你将会免费获得该店价值x元的代金

ACM学习历程—广东工业大学2016校赛决赛-网络赛F 我是好人4(数论)

题目链接:http://gdutcode.sinaapp.com/problem.php?cid=1031&pid=5 这个题目一看就是一道数论题,应该考虑使用容斥原理,这里对lcm进行容斥. 不过直接上去是T,考虑到序列中同时存在i和ki的话,其实只需要考虑i,所以先对序列中为倍数的对进行处理. 这里的容斥用了hqw的写法. 代码: #include <iostream> #include <cstdio> #include <cstdlib> #includ

ACM学习历程—广东工业大学2016校赛决赛-网络赛E 积木积水(最值问题 || 动态规划)

题目链接:http://gdutcode.sinaapp.com/problem.php?cid=1031&pid=4 这个题目自然会考虑到去讨论最长或者最短的板子. 笔上大概模拟一下的话,就会知道,假设最长的板子是r,0和n+1位置上都是高度为0的板子,那么对于[0, r-1]中的最长板子rr,rr到r这一短应该都是被深度为a[rr]的水覆盖.同样的[0, rr-1]中的最长板子rrr,rrr到rr这一段应该是被a[rrr]覆盖,以此类推可以搞定r的前面一段,同理搞定后一段. 关于最值这一块,

ACM学习历程—广东工业大学2016校赛决赛-网络赛D 二叉树的中序遍历(数据结构)

题目链接:http://gdutcode.sinaapp.com/problem.php?cid=1031&pid=3 这算是一个胡搞类型的题目.当然肯定是有其数据结构支撑的. 唯一的限制就是不能出现连续的两个’#’. 因为如果我从左到右构造这棵树,那么假设我构造到第i个, 如果i+1是数字,那么把前i个构成的子树作为i+1的左儿子即可. 如果i+1是’#’,那么把’#’当成i的右儿子即可. 所以只要没有两个连续的’#’,自然能通过上面的方法构造. 但是如果出现两个连续的’#’,自然前一个’#’