自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 [BZOJ 1415][Noi2005]聪聪和可可:期望

点击这里查看原题点数为1000,因此可以使用n^2算法。p[i][j]表示聪聪在i,可可在j,聪聪下一步走的点。先从每个点出发做一次BFS,预处理出p数组。然后记忆化搜索,f[i][j]表示聪聪在i,可可在j,聪聪追上可可的期望步数,于是f[i][j]=sigma{f[i往j走两步到达的点][j或j临近的点]}/(reg[j]+1)+1/*User:SmallLanguage:C++Probl

2017-04-20 09:51:21 323

转载 [BZOJ 2318]Spoj4060 game with probability Problem:概率

点击这里查看原题还是看别人的题解吧,很简单易懂/*User:SmallLanguage:C++Problem No.:2318*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;int n;double p,q,f[1005],g[1005];void sol

2017-04-20 09:01:47 348

原创 [COGS 1489]玩纸牌:期望

点击这里查看原题f[i][j]表示玩i局赢j局的概率,则f[i][j]=f[i-1][j] * (1-p)+f[i-1][j-1] * p,于是对于每天而言,失败的概率q为f[n][i] (0<=i<=a*n/b)。 可以得到,第一天失败的概率为q,第二天失败的概率为(1-q) * q,第三天失败的概率为(1-q)^2 * q…… 因此,总的期望ex=q * 1+ (1-q) * q * 2+(

2017-04-19 19:25:13 442

原创 [COGS 1487]麻球繁衍:概率

点击这里查看原题f[i]表示一只毛球及其后代在前i天全死掉的概率,则f[i]=p[0]+p[1] * f[i-1]+p[2] * f[i-1]^2+p[3] * f[i-1]^3+…… 因为各个毛球间的生存概率相互独立,所以答案为f[m]^k。/*User:SmallLanguage:C++Problem No.:11021*/#include<bits/stdc++.h>#defin

2017-04-19 17:21:29 379

原创 [BZOJ 1426]收集邮票:期望DP

点击这里查看原题挺神奇的一道题,我自己没完全看懂题解,还是放别人的链接吧。这里/*User:SmallLanguage:C++Problem No.:1426*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;double f[10005],g[10005];i

2017-04-19 14:18:14 628

原创 [BZOJ 3450]Tyvj1952 Easy:期望DP

点击这里查看原题设l为当前期望长度,分为三种情况:当前位为‘x’,l清零当前位为‘o’,ans+=(l+1)^2-l^2,l++当前位为‘?’,那么l可能变成l+1,也可能变成0,因此l的期望变为(l+1)/2,ans+=(2l+1)/2。/*User:SmallLanguage:C++Problem No.:3450*/#include<bits/stdc++.h>#defin

2017-04-19 11:22:03 378

原创 [CF 417D]Cunning Gena:状压DP

点击这里查看原题先把每个人按k升序排序, f [ i ] 表示完成状态i的最小花费,计算出显示器数量分别为 k [ j ] 时 f [ ( 1 < < m ) - 1 ] 的最小值,ans = min { f [ ( 1 < < m ) - 1 ] + k [ j ] * b }。/*User:SmallLanguage:C++Problem No.:417D */#include<bit

2017-04-19 10:22:22 456

原创 [BZOJ 1231][Usaco2008 Nov]mixup2 混乱的奶牛:状压DP

点击这里查看原题f[i][j]表示状态为i,以奶牛j结尾的情况数/*User:SmallLanguage:C++Problem No.:1231*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=(1<<16)+5;int a[20],n

2017-04-19 09:06:44 366

原创 [BZOJ 2276][Poi2011]Temperature:单调队列

点击这里查看原题因为每加入一天都要确保该天的r值大于等于已选中天的l的最大值,因此维护l值的递减队列。/*User:SmallLanguage:C++Problem No.:2096*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=1e6

2017-04-18 19:28:27 602

原创 [BZOJ 2096][Poi2010]Pilots:单调队列

点击这里查看原题维护两个单调队列,一个递增,一个递减。/*User:SmallLanguage:C++Problem No.:2096*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=3e6+5;int lx,rx,mx[M],mn[M

2017-04-18 17:34:52 394

原创 [BZOJ 4008][HNOI2015]亚瑟王:期望DP

点击这里查看原题f[i][j]表示第i张卡在第j回合被轮到(但不一定发动)的概率。 f[i][j]= f[i-1][j] * ( 1-p[i-1] ) ^ j + f[i-1][j+1] * ( 1- ( 1-p[i-1] ) ^ ( j+1 ) ) ,ans+=f[i][j] * ( 1 - ( 1 - p[i] ) ^ j ) * d[i]。/*User:SmallLanguage:C++

2017-04-18 16:21:05 380

原创 [BZOJ 3036]绿豆蛙的归宿:期望DP

点击这里查看原题f[i]表示从i到N的期望,因此f[i]为i能到的各个点的期望+边权的和除k。/*User:SmallLanguage:C++Problem No.:3036*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=1e5+5;

2017-04-18 15:43:18 356

原创 [BZOJ 3029]守卫者的挑战:期望DP

点击这里查看原题f[i][j][k]表示前i个挑战中挑战成功j次,目前背包容量-碎片数为k的概率。 直接开这么大的数组会MLE,因此需要使用滚动数组。/*User:SmallLanguage:C++Problem No.:3029*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using names

2017-04-18 14:27:04 385

原创 [BZOJ 1951][Sdoi2010]古代猪文:Lucas定理|中国剩余定理|费马小定理|扩展欧几里得

点击这里查看原题一道综合了各种数论的神题。其实不难,主要是需要组合在一起运用。 1.费马小定理:求G^P时使用,因为G^(mod-1)%mod=1,所以需要P%=mod-1 2.Lucas定理&中国剩余定理:计算组合数取模时使用,但是本题中mod-1不为素数,因此需要结合中国剩余定理使用(即扩展Lucas定理) 3.扩展欧几里得:中国剩余定理要求逆元/*User:SmallLanguage

2017-04-18 10:29:50 402

原创 [BZOJ 4403]序列统计:Lucas定理

点击这里查看原题统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量。 设M=R−L+1 长度为i,元素大小在1…M之间的单调不降序列的数量有C ( M−1 , i+M−1 ) 个 ,于是长度在1~N之间的数量有C ( M , N+M ) -1 个。 点击这里查看公式推导/*User:SmallLanguage:C++Problem No.:BZOJ 4403*/#inc

2017-04-18 09:21:17 342

原创 [BZOJ 1207][HNOI2004]打鼹鼠:DP

点击这里查看原题类似于最长上升子序列,但是只有m^2做法,不过可以使用一个优化,用mx[i]表示前i项中最大的f[i]值,一旦mx[j]+1<=f[i]就break,实测优化前1920ms,优化后60ms。/*User:SmallLanguage:C++Problem No.:1207*/#include<bits/stdc++.h>#define ll long long#defin

2017-04-17 21:51:56 323

原创 [BZOJ 1725][Usaco2006 Nov]Corn Fields牧场的安排:状压DP

点击这里查看原题用二进制串表示每一行的摆放情况,预处理出各个状态间的转移关系即可。 f[i][j]表示第i行按状态j摆放的方案数。/*User:SmallLanguage:C++Problem No.:1725*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;

2017-04-17 21:18:07 375

原创 [BZOJ 2064]分裂:状压DP

点击这里查看原题状压DP,sum[i]表示状态i时的面积和,f[i]表示状态i时可以少操作的次数。 因为可以把所有块合成一大块然后分裂,所以操作最多不超过n+m-2次,而如果有某个子集中的块面积和为0,则可以少操作2次,因此最终答案为n+m-f[1<<(n+m)-1]。/*User:SmallLanguage:C++Problem No.:2064*/#include<bits/stdc

2017-04-17 20:44:40 336

原创 [BZOJ 1076][SCOI2008]奖励关:状压DP

点击这里查看原题f[i][j]表示到第i次,吃完后状态为j的期望,则f[i][j]=上一步的期望+这一步的得分/n。 为了方便整理答案,使用倒推,答案即为f[1][0]。/*User:SmallLanguage:C++Problem No.:1076*/#include<bits/stdc++.h>#define ll long long#define inf 999999999u

2017-04-17 19:59:47 418

原创 [BZOJ 1087][SCOI2005]互不侵犯King:状态压缩DP

点击这里查看原题f[i][j][k]表示到第i行,摆放了j个国王且第i行摆法为k的方法数。 先预处理出所有摆法和摆法之间的转移关系,然后DP/*User:SmallLanguage:C++Problem No.:1087*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace

2017-04-17 17:54:27 327

原创 [BZOJ 2442][Usaco2011 Open]修剪草坪:单调队列

点击这里查看原题f[i]表示不选i且前面的都合法的最小损失,f[i]=min{f[j]+e[i]}(i-j<=k)/*User:SmallLanguage:C++Problem No.:2442*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int

2017-04-17 15:54:31 385

原创 [BZOJ 1233][Usaco2009Open]干草堆tower:单调队列

点击这里查看原题f[i]表示i~n堆叠成的最底层边的最小值,f[i]=min { sum[j-1]-sum[i-1] } ( i < j 且 sum[j-1]-sum[i-1]>=f[j] ) 对于i < j < k,j一定比k更优,如果只能选k,则说明j不满足条件,k满足条件。即,f[j] - sum[j-1]>f[k] - sum[k-1] /*User:SmallLanguage:C+

2017-04-17 15:18:24 480

原创 [BZOJ 1293][SCOI2009]生日礼物:单调队列

点击这里查看原题把所有珠子读进来,按位置排序,做单调队列。 讨论区有人说inf要设成2^31-1,于是就把ans设为了0x7fffffff。/*User:SmallLanguage:C++Problem No.:1293*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace

2017-04-17 14:24:37 470

原创 [BZOJ 1657][Usaco2006 Mar]Mooo 奶牛的歌声:单调栈

点击这里查看原题做两次单调栈,栈里存序号/*User:SmallLanguage:C++Problem No.:1657*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=5e4+5;int n,h[M],c[M],ans,sum[M],

2017-04-17 11:10:58 500

原创 [BZOJ 1660][Usaco2006 Nov]Bad Hair Day 乱发节:单调栈

点击这里查看原题水题/*User:SmallLanguage:C++Problem No.:1660*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=8e4+5;int n,c[M],s[M],tp;ll ans;int main(

2017-04-17 10:55:09 573

原创 [BZOJ 1113][Poi2008]海报PLA:单调栈

点击这里查看原题/*User:SmallLanguage:C++Problem No.:1113*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=25e4+5;int t,x,ans,n,tp,s[M];int main(){

2017-04-17 10:11:59 311

原创 [BZOJ 1345][Baltic2007]序列问题Sequence:单调栈

点击这里查看原题维护一个单调递减的栈,如果要加入的元素x大于栈顶元素s[top],分两种情况: 如果s[top-1]>x,ans+=x; 如果s[top-1]<=x,ans+=s[top-1]。/*User:SmallLanguage:C++Problem No.:1345*/#include<bits/stdc++.h>#define ll long long#define in

2017-04-17 10:00:24 330

原创 [BZOJ 3039]玉蟾宫:单调栈

点击这里查看原题单调栈模板题,注意答案要乘3。/*User:SmallLanguage:C++Problem No.:3039*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=1e3+5;int a[M][M],s[M],l[M],tp

2017-04-17 09:39:27 406

原创 [BZOJ 1007][HNOI2008]水平可见直线:单调栈

点击这里查看原题最终得到的一定是一个下凸壳,因此把所有直线以k升序为第一关键字,b降序为第二关键字进行排序。若当前直线能完全覆盖栈顶直线,即i与s[top]的交点在s[top]与s[top-1]的交点左侧,则将栈顶元素弹出。/*User:SmallLanguage:C++Problem No.:1007*/#include<bits/stdc++.h>#define ll long lo

2017-04-17 08:09:15 313

原创 [BZOJ 4813][Cqoi2017]小Q的棋盘:TreeDP

点击这里查看原题简单的TreeDP。f[i][j][0]表示从i点出发走j步不需要回到起点的最大点数,f[i][j][1]表示需要回到起点的最大点数。/*User:SmallLanguage:C++Problem No.:4813*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namesp

2017-04-15 11:41:49 677 2

原创 [BZOJ 2875][Noi2012]随机数生成器:矩阵乘法+快速乘

点击这里查看原题其实是个水题,坑点在于两个long long直接相乘会爆。long long的上限大概是2*1e18,而题目所给的数据不会超过1e18,因此可以使用快速乘。/*User:SmallLanguage:C++Problem No.:2875*/#include<bits/stdc++.h>#define ll long long#define inf 999999999u

2017-04-15 09:34:43 384

原创 [BZOJ 2818]Gcd:莫比乌斯反演

点击这里查看原题先跑一遍线性素数筛,然后枚举每个小于n的素数,求gcd(x,y)为素数的对数即为求gcd(x/prime[i],y/prime[i])=1的对数,因此对于用n去除得到的每个素数。 剩下的部分类似于HDU 2841/*User:SmallLanguage:C++Problem No.:2818*/#include<bits/stdc++.h>#define ll long

2017-04-15 08:29:37 716

原创 [BZOJ 2729][HNOI2012]排队:高精度+组合数

点击这里查看原题组合数问题,需要用到高精度。 把男生和老师混在一起,中间插入女生。两个老师刚好连在一起的情况为 A ( n+1 , n+1 ) * A ( 2 , 2 ) 这种情况下两个老师间必须插入女生,于是将两个老师和一个女生捆绑在一起,情况为 m * A ( n+1 , n+1 ) * A ( 2 , 2 ) 然后将剩余女生插入,情况为 A ( n+2 , m-1 ) 两个

2017-04-14 20:14:56 597

原创 [BZOJ 3669][Noi2014]魔法森林:SPFA

点击这里查看原题把所有边以a为第一关键字,b为第二关键字进行排序,依次加边,每加一条边做一次SPFA,看能否缩小答案。/*User:SmallLanguage:C++Problem No.:3669*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const i

2017-04-14 10:57:31 426

原创 [BZOJ 4197][Noi2015]寿司晚宴:状压DP

点击这里查看原题因为小于sqrt(500)的素数只有8个,而一个数大于sqrt(500)的素因子最多只有一个,因此可以将所有数分类,用一个二进制的8位数表示出现了哪些素因子,kind表示这个数的大于sqrt(500)的素因子,若不存在,则kind=1。将所有数按kind排序。 进行状压DP,f[i][j]表示1采用i方案,2采用j方案的方法数;p[i][j][k]表示该第i个人操作,1采用i方案,

2017-04-13 16:14:59 292

原创 [BZOJ 3240][Noi2013]矩阵游戏:逆元+递推

点击这里查看原题这个题需要一步一步推算: f[1][1]=1 f[1][m]=a ^ (m-1) * f[1][1]+b * (a ^ (n-1)-1) / (a-1) f[2][1]=f[1][m] * c+d=c * a^(m-1) * f[1][1]+b * c * (a ^ (n-1)-1) / (a-1) + d设e=a ^ (m-1) * c,g=b * c * (a

2017-04-13 15:02:51 369

原创 [BZOJ 3671][Noi2014]随机数生成器:贪心

点击这里查看原题很显然,贪心的去想,要使字典序最小,那么每次应从可以取的数中取最小的数,然后取完对左下和右上的部分标记,因为每个点只会被标记一次(遇到标记过的点就break),所以复杂度O(nm)/*User:SmallLanguage:C++Problem No.:6*/#include<bits/stdc++.h>#define ll long long#define inf 99

2017-04-13 10:27:43 428

原创 [HDU 1226]超级密码:BFS

点击这里查看原题n只有5000,设vis[i]表示模n为i的最小的c进制数(在代码里,vis[i]表示模n为i的数是否已出现),可以用BFS来求解,若位数大于500或该余数已出现过,则不再加入队列,找出最小的模n为0的数即为答案。/*User:SmallLanguage:C++Problem No.:1226*/#include<bits/stdc++.h>#define ll long

2017-04-12 21:54:49 298

原创 [HDU 5371]Hotaru's problem:Manacher

点击这里查看原题先做一遍Manacher求出每个位置的回文串长度,然后暴力枚举第二个串的位置,为了优化,只找比答案更优的。/*User:SmallLanguage:C++Problem No.:5371*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const

2017-04-12 20:57:17 371

原创 [HDU 4739]Zhuge Liang's Mines:状压DP

点击这里查看原题题目中只有20个点,因此可以枚举每种选点方案,然后进行状态压缩DP。f[i]=max(f[i],f[i^t]+4) (我因为判断函数写错,WA了好几次)/*User:SmallLanguage:C++Problem No.:4739*/#include<bits/stdc++.h>#define ll long long#define inf 999999999us

2017-04-12 20:00:29 409

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除