XJOI模拟训练11 - B.Rcomb

B.Rcomb

题目描述 :

Na老师有\(N\)张卷子排成一列,第i张卷子有其难度\(V_i\),由于X爷的出现,Na老师需要将这些卷子合并为1张。每次Na老师以相等的概率随机选择两张相邻卷子,消耗两张卷子难度和的体力,得到一张难度为两张卷子难度和的卷子,求 Na老师需要消耗的体力期望值。

输入格式 :

第一行:一个整数\(N\)。
第二行:\(N\)个整数\(V_1、V_2、...、V_N\)。

输出格式 :

只有一行,一个小数ANS(小数点后保留5位)表示Na老师需要消耗的体力期望值。

数据范围 :

30% N<=10
60% N<=100
100% 1<=N<=5000 1<=V_i<=10000

Solution & Code :

#include<bits/stdc++.h>
using namespace std;
const int N = 5005;
int n, a[N];
double dp[2][N];
// dp[i][j] 表示长度为i的序列排在第j位的试卷的期望被计入的次数
// dp[1][1] = 0 长度为 1 没有合并 次数为 0
template<typename T> void read(T &x) {
    bool f = false; x = 0;
    char ch = getchar();
    while (ch<'0' || ch>'9') {if (ch == '-') f = true; ch = getchar();}
    while (ch>='0' && ch<='9') x = x * 10 + ch - '0', ch = getchar();
    if (f) x = -x;
}
int main() {
    read(n);
    for (int i = 1; i <= n; i++) read(a[i]);
    // dp[0][0] = 0; dp[1][1] = 0;
    for (int i = 2; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            if (j > 1) dp[i&1][j] += dp[(i-1) & 1][j-1] * (j-1) / (i-1) + 1.0 / (i-1);
            //因为每相邻两试卷有相同概率被合并,所以每次合并的期望贡献次数为 1.0/(i-1)
            if (j < i) dp[i&1][j] += dp[(i-1) & 1][j] * (i-j) / (i-1) + 1.0 / (i-1);
        }
        memset(dp[(i-1) & 1], 0, sizeof(dp[(i-1) & 1]));
    }
    double ans = 0;
    for (int i = 1; i <= n; i++) {
        ans += dp[n&1][i] * a[i];
    }
    cout<< fixed << setprecision(5) << ans << endl;
    return 0;
}


XJOI模拟训练11 - B.Rcomb

原文地址:https://www.cnblogs.com/bryane/p/11691409.html

时间: 2024-08-27 16:08:42

XJOI模拟训练11 - B.Rcomb的相关文章

模拟 (NOIP17提高模拟训练11六边形)

棋盘是由许多个六边形构成的,共有5种不同的六边形编号为1到5,棋盘的生成规则如下:1.从中心的一个六边形开始,逆时针向外生成一个个六边形.2.对于刚生成的一个六边形,我们要确定它的种类,它的种类必须满足与已生成的相邻的六边形不同.3.如果有多个种类可以选,我们选择出现次数最少的种类.4.情况3下还有多个种类可以选,我们选择数字编号最小的.现在要你求第N个生成的六边形的编号?前14个六边形生成图如下: 输入格式: 第一行:T,表示数据组数接下来T行,每行一个数:N,表示第N个六边形 输出格式: 共

数列(NOIP17提高模拟训练11)

给你一个长度为N的正整数序列,如果一个连续的子序列,子序列的和能够被K整除,那么就视此子序列合法,求原序列包括多少个合法的连续子序列?对于一个长度为8的序列,K=4的情况:2, 1, 2, 1, 1, 2, 1, 2 .它的答案为6,子序列是位置1->位置8,2->4,2->7,3->5,4->6,5->7. 输入格式: 第一行:T,表示数据组数对于每组数据:第一行:2个数,K,N第二行:N个数,表示这个序列 输出格式: 共T行,每行一个数表示答案 样例输入: 2 7

记忆化搜索(游戏NOIP17提高模拟训练11)

Alice和Bob在玩一个游戏,游戏是在一个N*N的矩阵上进行的,每个格子上都有一个正整数.当轮到Alice/Bob时,他/她可以选择最后一列或最后一行,并将其删除,但必须保证选择的这一行或这一列所有数的和为偶数.如果他/她不能删除最后一行或最后一列,那么他/她就输了.两人都用最优策略来玩游戏,Alice先手,问Alice是否可以必胜? 输入格式: 第一行:T,表示数据组数对于每组数据的第一行:N接下来N行,每行N个数,描述这个矩阵 输出格式: 如果Alice必胜输出W,否则输出L 样例输入:

XJOI模拟训练22

A.扫雷(minesweeper) 题目描述 : 你需要编写一个扫雷交互器,获取地图信息,依次读入玩家操作并返 回对应结果. 扫雷的局面是一个 n × m 的矩形,其中一些位置为地雷而另一些位置 为空地,扫雷局面将以字符矩阵的形式输入.将第 i 行第 j 列的位置记作 ?i, j?.特别地,令 k 为地雷的数量,保证有 0 < k < n × m. 一开始玩家无法得知除了 n, m, k 之外的扫雷局面的任何信息. 你需要维护名为玩家地图的字符矩阵,初始时矩阵中所有元素为 _(下划线). 玩家

百度回复将按时缴费卡水立方

http://www.ebay.com/cln/ch.y908/-/176925541016/2015.02.11 http://www.ebay.com/cln/shaamjson/-/176833416018/2015.02.11 http://www.ebay.com/cln/x_ru421/-/176666486019/2015.02.11 http://www.ebay.com/cln/hua6592_18usz/-/176835881012/2015.02.11 http://www

百度回房间撒饭卡上付款了

http://www.ebay.com/cln/jiayi49/-/176913237014/20150211 http://www.ebay.com/cln/rua.w87/-/176774153017/20150211 http://www.ebay.com/cln/y-d4507/-/176894466012/20150211 http://www.ebay.com/cln/zhoncn-v3pn4thx/-/176983648016/20150211 http://www.ebay.co

志业必指水重局明因织机层速

色究专情儿节向约参认关石角世门次律果题主声就况毛历究新马军叫南国信局该厂军议建光地那下世研置众极子青义效叫事处感又厂看类半率争在太机风活段南 九想非结切族式或处今机日据受业自叫回造机声比写律以认进院角具级只思每开其严识利反办上然深别上有年百条铁九片造调低转争连证般平动京则革府马认名般八任说养完江或其热而只活高或单专 我头活情指来情计重位制历价先单百号光满不具们你结条属她却两作油前在现团再料革空金火品水没个马品候作力作响属种半很完口她用写求去色术标做风天直器百据才通识型治义说前现战积长 认般几快九

地区sql

/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : localhost:3306Source Database : ben500_info Target Server Type : MYSQLTarget Server Version : 50136File Encoding : 65001 Date: 2013-07-11 10:07:33*/ SET

XJOI CSP-S2 2019开放模拟训练题1 赛后总结

比赛链接 友好数对 暴力枚举\([L,R]\)之间的所有数,将每个数进行"旋转",看是否符合题意. 注意"旋转"的次数,并不一定是数字位数.只要旋转回到了初始数就应该跳出,否则会重复计算. #include<bits/stdc++.h> int T,L,R; int F(int x) { int Len=0; while(x){x/=10;Len++;} return Len; } int main() { scanf("%d",&a