[redundant binary - 冗余二进制]:由0,1,2构成的二进制形式,基数还是2. 现给你一十进制数n,问其可转化成多少种冗余二进制形式. 首先要想到:2x = 2*2x-1 也就是说 10 <=> 02:20 <=> 12: 10000 -> 10000 -> 02000 -> 01200 -> 01120 -> 01112 从上面可以看出,第一位的1保持不变时,有1种冗余二进制形式:第一位的1变为0时,其后有多少个0存在,就有多少种冗…
原题地址:https://vjudge.net/problem/ZOJ-3329 题目大意: 有三个骰子,分别有k1,k2,k3个面,初始分数是0.第i骰子上的分数从1道ki.当掷三个骰子的点数分别为a,b,c的时候,分数清零,否则分数加上三个骰子的点数和,当分数>n的时候结束.求需要掷骰子的次数的期望. (0<=n<= 500,1<K1,K2,K3<=6,1<=a<=K1,1<=b<=K2,1<=c<=K3) 思路: 如果设当前分数为 i…
A - Alice's Print Service Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4791 Description Alice is providing print service, while the pricing doesn't seem to be reasonable, so people using her…
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5568 Edge to the Root Time Limit: 1 Second      Memory Limit: 131072 KB Given a tree with n vertices, we want to add an edge between vertex 1 and vertex x, so that the sum of d(1, v) for all…
题目:https://loj.ac/problem/2304 看了各种题解…… \( dp[i][j] \) 表示有 i 列.第 j 行及以下默认合法,第 j+1 行至少有一个非法格子的概率,满足最大合法矩形面积 <= lm.其中第 j 行及以下的部分的贡献是 1 而不是 q 的几次方. 那么有 \( dp[i][j]=dp[i][j+1]*p^i + \sum\limits_{k=1}^{i}dp[k-1][j+1]*p^{k-1}*(1-p)*dp[i-k][j] \) 注意到当 i>k…
地址:https://atcoder.jp/contests/agc033/ D Complexity dp[ i ][ j ][ k ][ l ] 表示左上角是 ( i , j ) .右下角是 ( k , l ) 的矩阵的最小代价. 注意到答案是 log(n) + log(m) 级别的,因为每次从中间分, log 次之后就变成一行/列,log(n)+log(m)次就变成 1*1 的格子,代价是 0 . 所以把值和角标互换,dp[ i ][ j1 ][ j2 ][ k ] 表示左上角是 ( i…
题目链接 \(Description\) 有\(n\)个数,用其中的某些数构成集合,求构造出\(m\)个互不相同且非空的集合(\(m\)个集合无序),并满足每个数总共出现的次数为偶数的方案数. \(Solution\) 为简化问题,将无序转为有序,只需在最后除以\(m!\)即可. 设\(f[i]\)表示构造前\(i\)个集合并满足条件的方案数. 每个数出现次数为偶数,所以如果前\(i-1\)个集合确定,第\(i\)个集合也可以确定.这样对于\(i\)有\(A_{2^n-1}^{i-1}\)种方案…
题目:http://codeforces.com/contest/809/problem/D 看题解,抄标程...发现自己连 splay 都快不会写了... 首先,题目就是要得到一个 LIS: 但与一般不同的是,新加入的不是一个值,而是一个取值范围: 仍是设 f[i] 表示长度为 i 的 LIS 的结尾最靠前是哪个位置,而此时新出现一个区间 l~r: 如果 f[i] < l,那么可以接上一个 l 变成 f[i+1],也就是 f[i+1] = l: 如果 l <= f[i] <= r,也可…
题意:1-n个位置中,每个位置填一个数,问至少有l个数是相同的概率. 可以转化求最多有l-1个数是相同的. dp[i][j]表示前i个位置填充j个位置的方案数,并且要满足上面的条件. 则: dp[i][j]=∑dp[i-1][j-k]*c[m-j+k][k]; 也就是看第i个数,可以不填,填一个位置,两个位置······这样累加过来. 代码如下: import java.math.*; import java.util.*; public class Main { public static v…
POJ 3744 Scout YYF I 这就是一个乱搞题,暴力发现TLE了,然后看了看discuss里说可以矩阵加速,想了一会才想明白怎么用矩阵,分着算的啊.先算f[num[i]-1]之类的,代码太长了,还是找找规律吧.. #include <cstdio> #include <cstring> #include <iostream> #include <map> #include <algorithm> #include <vector…