marbles专题

Codeforces Round 916 (Div. 3) E1. Game with Marbles(博弈论*1400)

感觉很难想。 如果你直接想的话,你就会发现有很多做法可以选择,而你根本不知道应该选哪个。 这时候可以先假设鲍勃已经取走了爱丽丝的所有的颜色的弹珠,(并且以每个颜色一个弹珠的代价)。 这时候每一项得分就是 S i = − ( b i − 1 ) S_i = -(b_i - 1) Si​=−(bi​−1)。 然后我们使得这时候爱丽丝的操作为取回弹珠,即她可以选择一种颜色的弹珠,并且直接取回,鲍勃

lightoj 1050 - Marbles (概率DP)

思路:定义dp[i][j] 为 袋子中有i个红球和j个红球时获胜的概率 那么根据题意我只可以任意拿而对手只拿蓝球。那么 dp[i][j] = (拿到红球的概率) * dp[i-1][j-1] + (拿到蓝球的概率) * dp[i][j-2]; 边界:当红球没有时,获胜的概率为1 注意点:T比较大,需要把所有数据预处理出来直接查询,否则超时 /*********************

LightOJ 1050 - Marbles(dp)

题目链接:LightOJ 1050 - Marbles 代码 #include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 505;int R, B;double dp[maxn][maxn];void init () {memset(dp, 0, sizeof(d

UVA 10090 - Marbles (数论)

UVA 10090 - Marbles 题目链接 题意:有两种盒子,一种代价c1,能装n1个珠子,一种代价c2,能装n2个珠子,问如何正好装n个珠子,并且使得代价最少。 思路:利用扩展欧几里得算法求出n1∗x+n2∗y=n的一个解(x′,y′) 就可以知道x,y的通解分别为 x=x′∗n/gcd(n1,n2)+n2/gcd(n1,n2)∗t y=y′∗n/gac(n1,n2)−n1/gc

Codeforces Round #585 (Div. 2) E. Marbles (状压DP),BZOJ大理石(同一道题)题解

题意 林老师是一位大理石收藏家,他在家里收藏了n块各种颜色的大理石,第i块大理石的颜色为ai。但是林老师觉得这些石头在家里随意摆放太过凌乱,他希望把所有颜色相同的石头放在一起。换句话说,林老师需要对现有的大理石重新进行排列,在重新排列之后,对于每一个颜色j,如果最左边的颜色为j的大理石是第l块大理石,最右边的颜色为j的大理石是第r块大理石,那么从第l块大理石到第r块大理石,这些石头的颜色都为j。

How the Parthenon Lost Its Marbles

本文来自国家地理 How the Parthenon Lost Its Marbles 帕特农神庙是怎样失去大理石雕的 In 1801 a British nobleman stripped the Parthenon of many of its sculptures and took them to England. Controversy over their acquisitio

题解:CF1914E-Game with Marbles

题解:CF1914E-Game with Marbles 事先说明一下,本题解不讲解简单数据范围的算法,因为复杂数据范围的就很简单。 这道题的大体意思是这样的:小A有颜色为i(i=1~n)的小球a[i]个,小B有颜色为i(i=1~n)的小球b[i]个。现在他们进行一次比赛,规则如下:由双方轮流操作,小A先来,每次操作,操作方将选择一个颜色x(x=1~n),并保证双方此时都至少有一个该颜色的球,

ARC 086 E - Smuggling Marbles(DP)

题目链接:https://arc086.contest.atcoder.jp/tasks/arc086_c 这个题很毒啊。。。辣鸡选手补了2个小时才弄明白怎么做,很优秀啊? 题解讲的很细,复杂度证明上,每一次合并,会让某层的节点数减1,所以是O(N)的的复杂度 代码: #include<bits/stdc++.h>using namespace std;const int MA

SPOJ MARBLES(简单组合)

暑期个人赛第四场 题意:把n个求分给k个颜色, 思路:转化一下,将球的n-1个空隙插上隔板,那么答案就是c(n-1,k-1); 代码如下: #include <cstdio>long long c(int n, int k){if(n-k<k) k = n-k;double ans = 1;for(int i = 1; i <= k; i++) ans*=1.0*(n-i+1)/