
dp
文章平均质量分 61
Green_G
这个作者很懒,什么都没留下…
展开
-
codeforces 518D Ilya and Escalator
题目链接:点击打开链接题目大意是,有n个事件,按顺序排列,每一秒,排列在最前的事件有p的概率发生,发生后移出排列。(如果之前的事件没有发生,后面的事件都不会发生,每秒只有可能发生一件事)问t秒后发生事件的数学期望计算每一个时间点可能发生的事件的数量的概率,dp就行。状态转移方程为dp[i][j] = dp[i-1][j] * (1-p) + dp[i-1][j-1] * p。i表示原创 2015-02-26 11:01:58 · 371 阅读 · 0 评论 -
HDU 5273 Dylans loves sequence
点击打开链接有一个长度为1000的数组,有10^5个询问一段区间[L,R]之内有多少个逆序对。因为数组长度为1000,所以可以把结果保存下来然后O(1)查询,求逆序对有很多方法,树状数组线段树或者用分治归并。第一次用线段树写逆序对。。。线段树求逆序对的方法就是将数组降序排序,相同的元素按下标降序排序,排好序之后,再按照顺序插入线段树并标记,线段树的叶子节点的位置代表元素原来的位置,原创 2015-06-22 16:12:45 · 322 阅读 · 0 评论 -
CF 2B The least round way
题目大意:一个n∗nn*n的矩阵MM,每个位置有一个值Mi,jM_{i,j},从左上角出发到右下角,只能向右或向下走,并将途经的数字相乘,求一条路径使得乘积的结尾零最少。题解:将每一个数字分解,看有多少个2和多少个5。那么问题就变成了求从左上到右下经过最少的2或最少的5的路径。dp即可。注意,当有0存在时,如果结尾0大于1,那么一定会走过0的一条路径。#include <bits/stdc++.h>原创 2016-10-25 20:07:46 · 319 阅读 · 0 评论 -
CF 4D Mysterious Present
题目大意:一张宽为w,长为h的明信片,有n(n≤5000)(n\leq5000)个信封,每个信封有其长和宽,一个信封能装的东西必须长宽严格小于自身的长宽,不可以旋转。问装这个明信片最多能用多少信封。题解:首先去掉所有长宽不大于h和w的信封,然后对信封按照长或宽为关键字排序。dp[i]dp[i]表示最外层是第ii个信封最多能用多少个信封,记录一下从哪个状态转移过来。总复杂度O(n2+nlogn)O(n原创 2016-10-27 22:25:54 · 299 阅读 · 0 评论 -
HDU5945 Fxx and game
题目大意:一开始你将会得到一个数X(1≤X≤106)X(1 \leq X \leq 10^6),每次游戏将给定两个参数k,t(1≤k,t≤106)k,t(1\leq k,t \leq 10^6), 任意时刻你可以对你的数执行下面两个步骤之一:1.X=X−i(1≤i≤t)X = X - i(1 \leq i \leq t)。2.若XX为kk的倍数,X=X/kX = X / k。保证有解,求X变成1的最原创 2016-11-01 18:50:18 · 323 阅读 · 0 评论 -
gym101147 Bishops Alliance
#include using namespace std;typedef long long ll;const int maxn = 100010;struct node{ int x;shuzhuang ll p; node(int x,ll p):x(x),p(p){} node(){} bool operator<(const node原创 2016-11-20 12:40:38 · 487 阅读 · 0 评论