小象涂色 [DP]

小象涂色
题目描述:
( elephant.pas/.c/.cpp )
时间限制: 1s ,空间限制 128MB
小象喜欢为箱子涂色。小象现在有 c 种颜色,编号为 0~c-1 ;还有 n 个箱子,编号为
1~n ,最开始每个箱子的颜色为 1 。小象涂色时喜欢遵循灵感:它将箱子按编号排成一排,
每次涂色时,它随机选择 [L , R] 这个区间里的一些箱子(不选看做选 0 个),为之涂上随
机一种颜色。若一个颜色为 a 的箱子被涂上 b 色,那么这个箱子的颜色会变成( a*b ) mod
c 。请问在 k 次涂色后,所有箱子颜色的编号和期望为多少?
输入描述:
第一行为 T ,表示有 T 组测试数据。
对于每组数据,第一行为三个整数 n,c,k 。
接下来 k 行,每行两个整数 Li , Ri ,表示第 i 个操作的 L 和 R 。
输出描述:
对于每组测试数据,输出所有箱子颜色编号和的期望值,结果保留 9 位小数。
样例输入:
3
3 2 2
2 2
1 3
1 3 1
1 1
5 2 2
3 4
2 4
样例输出:
2.0625000001.000000000
3.875000000

分析

仔细发现,每个物品是一样的,没有必要区别分析

我们记dp[i][j]为物品处理了i次,最后颜色为j

那么dp[i][j]=dp[i-1][j]*1/2+∑dp[i-1][(j*k)%c]

还是蛮有意思的

原文地址:https://www.cnblogs.com/ibilllee/p/9457829.html

时间: 2024-07-31 14:37:13

小象涂色 [DP]的相关文章

【NOIP模拟题】小象涂色(概率+期望+递推)

表示数学是个渣... 其实只需要推出每个箱子k次以后的颜色为i的概率就能算出期望了.. 对于区间[l, r]的箱子因为是任意颜色且任意取,所以概率分别为1/c和1/2,那么整体概率就为这两个的乘积.根据全概率公式,对于后边的状态我们可以累加和就行了.. 求出概率后期望就是颜色编号*概率....... 暴力40分..O(k*n*c^2)... #include <cstdio> #include <cstring> #include <cmath> #include &l

BZOJ 1260 [CQOI2007]涂色paint(区间DP)

[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1260 [题目大意] 假设你有一条长度为n的木版,初始时没有涂过任何颜色 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色 求最少的涂色次数达到目标状态 [题解] dp[i][j]表示涂抹i到j的最优答案, 显然当i和j相同时,可以从i+1……j,i……j-1,i+1……j-1转移过来, 同时也可以从两个区间组合得到. [代码] #include <cstdio>

BZOJ 1260: [CQOI2007]涂色paint( 区间dp )

区间dp.. dp( l , r ) 表示让 [ l , r ] 这个区间都变成目标颜色的最少涂色次数. 考虑转移 : l == r 则 dp( l , r ) = 1 ( 显然 ) s[ l ] == s[ l + 1 ] 则 dp( l , r ) = dp( l + 1 , r )     s[ r ] == s[ r - 1 ] 则 dp( l , r ) = dp( l , r - 1 )  因为只要在涂色时多涂一格就行了, 显然相等 , 所以转移一下之后更好做 s[ l ] == s

BZOJ 1260: [CQOI2007]涂色paint【区间DP】

Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色.例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标. 用尽量少的涂色次数达到目标. Input 输入仅一行,包含一个长度为n的字符串,即涂色目标.字符串中的每个字符都是一个大写字母,不同的字母代表不同颜色,相同的字

【DP】BZOJ 1260: [CQOI2007]涂色paint

1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 893  Solved: 540[Submit][Status][Discuss] Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色.例如第一次把木版涂成R

【BZOJ-1260】涂色paint 区间DP

1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MBSubmit: 1147  Solved: 698[Submit][Status][Discuss] Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色.例如第一次把木版涂成

[BZOJ 1260][CQOI2007]涂色paint 题解(区间DP)

[BZOJ 1260][CQOI2007]涂色paint Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色.例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标. 用尽量少的涂色次数达到目标. Input 输入仅一行,包含一个长度为n的字符串,即涂色目标.字符串中的

[BZOJ1260][CQOI2007]涂色paint 区间dp

1260: [CQOI2007]涂色paint Time Limit: 30 Sec  Memory Limit: 64 MB Submit: 1575  Solved: 955 [Submit][Status][Discuss] Description 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色.例如第一次把木版

BZOJ_1260_[CQOI2007]涂色paint _区间DP

题意: 假设你有一条长度为5的木版,初始时没有涂过任何颜色.你希望把它的5个单位长度分别涂上红.绿.蓝.绿.红色,用一个长度为5的字符串表示这个目标:RGBGR. 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色.例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标. 用尽量少的涂色次数达到目标. 分析: f[i][j]表示从i到j染色最少需要多少次 分a[i]==a[j]讨论一下 代码: #include <stdio.h> #inclu