自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

idealism_xxm的专栏

Only the spirit is our fuel!

  • 博客(39)
  • 收藏
  • 关注

原创 2013首届陕西省赛

1069: Donald’s company (最小生成树)1071: Rectangle Counting (枚举)1072: National Disaster (Tarjan)1073: Nunchakus (DP)

2016-05-21 12:17:46 781

原创 2014-2015 ACM-ICPC Northeastern European Regional Contest (NEERC 14)

Problem B. Burrito King (贪心)Problem J. Jokewithpermutation (DFS)Problem K. Knockout Racing (模拟)

2016-05-20 21:03:53 1239

原创 2016 "百度之星" - 资格赛(Astar Round1)

Problem A (前缀积&&乘法逆元)Problem B (DP)Problem C (Trie树)Problem D (map)

2016-05-16 00:01:06 680

原创 2016年 团体程序设计天梯赛 - 模拟赛

L2-1. 集合相似度 (排序)L2-2. 树的遍历 (分治)L2-3. 家庭房产 (并查集)L2-4. 最长对称子串 (Manacher)L3-1. 肿瘤诊断 (BFS)

2016-05-15 16:02:00 7260

原创 HDU-4734 F(x) (数位DP)

好不容易遇见一个较为简单的数位DP,结果忘了求f(a),直接传入a,还debug半天...看数据范围可以知道,max(f(x))=f(999999999)=4599,所以设dp[25][4615]即够dp[i][j]表示长度为i的数,f(x)大小不超过j的数的个数

2016-05-15 11:00:06 584

原创 SPOJ-BALNUM Balanced Numbers (数位DP)

第一反应又是每一个数字都添加一维,又变成11维dp,时空是过不去其实可以发现,每一个数字只有3中状态,未出现、出现奇数次、出现偶数次,这样就可以采用三进制进行状态压缩,就变成二维状态了设dp[i][j]表示在前面状态是j的情况下,低i-1位取满足题意的数的个数

2016-05-15 09:04:10 704

原创 HDU-3709 Balanced Number (数位DP)

又是一个状态很难想的数位DP对于一个非0数x,最多只存在一个支点pivot使力矩为0所以支点不同时的统计个数不重复(不包括0),可以直接相加所以可以设dp[i][j][k]表示长度为i时,支点为j,且高位的数的力矩为k时,满足题意的数的个数

2016-05-14 23:27:50 585

原创 Codeforces-55D Beautiful numbers (数位DP)

想着前面做的加余数维的方法,想着弄成11维dp...但是时空都会超,然后就又不会了数位DP果真太难了,状态好难想,貌似只有dfs有模版...看了题解后了解到:如果一个数能整除a,b,...,z,则该数必定能整除他们的最小公倍数lcm而1~9的最小公倍数为2520,且1~9中所有的可能的最小公倍数有48个,可以对最小公倍数离散化所以可以设dp[25][50][2520],dp[i][ha[j]][k]表示长度为i时,且前面位的最小公倍数为j,且高位的数模MOD的值为k时,满足题意要求的答案

2016-05-14 22:32:22 526

原创 POJ-3281 Dining (最大流[Ford-Fulkerson])

首先,一头牛必须吃到一种食物,喝到一种饮料才算数,所以食物和饮料同时连到一头牛身上是不可以的(可以看做并联吧),然后就想到拆点,但是拆点后怎么连都还是是并联,完全没想到换一下顺序...最终还是看了一下思路:牛拆成两个点牛1和牛2,牛1到牛2有权值为1的边(保证一头牛只计入一次),源点到食物有权值为1的边(保证一种食物只用一次),食物到牛1有权值为1的边,牛2到饮料有权值为1的边,饮料到汇点有权值为1的边(保证一种饮料只用一次)然后就可以开心的跑最大流了

2016-05-14 00:05:18 416

原创 HDU-3652 B-number (数位DP)

感觉入错坑了...非递归的数位DP好难写(虽然一次AC了),但是一看别人的递归数位DP,非常简洁,还不容易出错,需要赶快换一下本题比原先做的又多了一个限制:数还要满足是13的倍数,然后就又不会了...看了题解的设置状态的部分,瞬间明白了,可以再加一维表示余数的状态,然后利用模运算的性质就能顺利成章地想到以下这种转移状态(又看到有非递归的题解,感觉还是写的麻烦了)

2016-05-11 21:47:06 574

原创 POJ-3252 Round Numbers (数位DP)

写完后看了很多题解,发现大家用数位DP都要用dfs,感觉直接循环也很好理解啊...设dp[i][j][0]表示长度为i,含有j个0且最高位为0的数字的个数;dp[i][j][1]表示长度为i,含有j个0且最高位为1的数字的个数初始:dp[1][0][1]=1;//长度为1,含有0个0且最高位为1的数字个数为1 dp[1][1][0]=1;//长度为1,含有1个0且最高位为0的数字个数为1然后通过状态转移,预处理出所有的结果最后再在函数中进行从高位到低位的按位统计差不多有点感觉了

2016-05-10 12:44:20 924

原创 HDU-2089 不要62 (数位DP)

感觉这一类的数位DP已经比较熟悉了,但是其他类型的还没接触过...

2016-05-09 18:08:04 784

原创 POJ-3436 ACM Computer Factory (最大流[Ford-Fulkerson])

初看题目,感觉非常难懂,也很难想到最大流,手动跑了几组数据后,发现题目就是求从p元组(0,...,0)到p元组(1,...,1)的最大流,然后就可以建图跑最大流即可首先,将每台机器的输入输出分别看成1个点,则这两点之间存在流量为q的有向边其次,添加可能会添加的边,即将各机器的输出与其他机器的输入比较,如果输出符合输入标准,则添加流量为无穷的边然后跑最大流即可,注意每次只记录添加的边即可最后直接输出结果刚开始统计路径的方法有点问题,但是随机了很多数据都找不出错,最后终于找到一组数据

2016-05-09 17:01:48 834

原创 HDU-3555 Bomb (数位DP)

数位DP入门题设dp[i][0]表示长度为i,不含49的数字个数;dp[i][1]表示长度为i,不含49且最高位为9的数字个数;dp[i][2]表示长度为i,含有49的数字个数不是很明白为什么第二维状态要这样取...

2016-05-08 19:06:48 1117

原创 XDU-1043 Boooooom (概率DP)

设dp[i][j]表示前i个人中有j个人来上课的概率,初始:dp[0][0]=0;状态转移方程为:dp[i][j]=dp[i-1][j]*(1-p[i])+dp[i-1][j-1]*p[i];计算n个人中来上课的人数大于等于k时的概率为sum则可求的上课天数的期望为:sum+sum^2+…+sum^x,(x→∞)等比数列求和得:sum/(1-sum)

2016-05-08 14:32:46 754

原创 XDU-1032 找规律II (Lucas定理)

很容易就能看出是结果组合数,所以直接套用Lucas模版即可

2016-05-08 14:00:39 567

原创 三维计算几何模版

网上找了一个三维计算几何模版,完善了一下,使它能使用了...

2016-05-08 11:14:12 2165

原创 XJTU Contest 1

1000 郭铮鹏与大学计算机基础 (模拟)1001 郭铮鹏与约会 (模拟)1002 郭铮鹏与杯垫 (模拟)1003 郭铮鹏与比赛 (排序)1004 郭铮鹏与书 (模拟)1005 GZP and Poker (数学)1006 GZP and Counting (模拟)1007 GZP and world of single-dogs (计算几何)1008 GZP and CS (数位DP)1009 GZP and Date II (贪心&&Lucas定理)

2016-05-07 22:31:25 1075

原创 POJ-1459 Power Network (最大流[Ford-Fulkerson])

添加一个虚拟源点和一个虚拟汇点,添加源点到生产者的边(权值为生产者能生产的能量),添加消费者到汇点的边(权值为消费者能消费的能量),则转化为最大流模版题。刚开始用STL库的queue和priority_queue,结果都超时了,第一次被STL的慢坑住了。。。换成数组模拟的队列800ms AC

2016-05-07 16:44:10 622

原创 POJ-1860 Currency Exchange(Bellman-Ford)

由于本题是要求走一圈后,权值变大,所以更改Bellman-Ford的初始条件和更新条件,即可更改为求已s为起点的“最长路”,因为更新方法变了,所以每次能更新到的点必定是s点可达的点,即也再可兑换回s,所以只要用Bellman-Ford判断是否有“负权回路”即可关于讨论版后的数据:45 43 8 32.46000040 6 90.90 17.59 45.28 89.7029 18 37.97 55.13 84.48 52.8145 26 59.25 99.43 27.79 90.847 42 5

2016-05-07 13:10:08 770

原创 POJ-3259 Wormholes(负权回路[Bellman-Ford])

只以1号点为源点做Bellman-Ford即可判断图中是否存在负权回路(该负权回路不一定以1号点为起点)例如:13 0 22 3 13 2 1这组数据会输出YES调试时能发现,dis[2],dis[3]每次都在更新,但是是在INF的基础上更新,所以要判断1号点是否可打2,3时,要判断dis[2],dis[3]是否 大于 图中的最大权值和才行

2016-05-07 11:42:34 849

原创 POJ-1062 昂贵的聘礼(Bellman-Ford)

完全忘了Bellman-Ford和SPFA了,只会Dijkstra和Floyd...赶紧复习一下Bellman-Ford貌似就是单源版的Floyd,还是挺简单的...本题点权只在最短路算完时才算入,所以直接算最短路即可,不过需要注意:这题有在一条最短路上的任意两点的等级差距不大于m

2016-05-07 10:05:42 643

原创 HDU-4089 Activation(概率DP)

设dp[i][j]表示有i人队,排在第j号位置时,达到目标状态的概率,初始:dp[1][1]=p4/(1-p1-p2),则dp[n][m]即为答案则状态转移方程为:①j==1:dp[i][1]=p1*dp[i][1]+p2*dp[i][i]+p4;②1<j<=k:dp[i][j]=p1*dp[i][j]+p2*dp[i][j-1]+p3*dp[i-1][j-1]+p4;③k<j<=i:dp[i][j]=p1*dp[i][j]+p2*dp[i][j-1]+p3*dp[i-1][j-1];即:①j=

2016-05-06 17:17:13 703

原创 HDU-4336 Card Collector(状压概率DP||容斥原理)

感觉做了这么多概率dp,还是离熟悉比较远合集里看到的,结果一眼就看到是用状态压缩做,然后状态都出来了,转移就没什么难度了...设dp[i]表示当前取到了i的二进制中位的为1的卡时,离达到目标状态还需要购买方便面的期望,初始状态:dp[(1<<n)-1]=0;则dp[i]可以转化为:①:下一袋方便面没有卡,或j卡已有,即:(∑p[j]+pp)*(dp[i]+1);②:下一袋方面面存在j卡,且当前没有,即:(∑p[j]*(dp[i|(1<<j)]+1);则状态转移方程为:dp[i]=(∑p[j]+p

2016-05-06 06:57:12 822

原创 ZOJ-3380 Patchouli's Spell Cards(概率DP&&大数)

看了题解后发现大神总结抽象能力好强,抽象成:有m个位置,在每个位置随机填上1~n个数,求相同的数至少有l的概率?即使这样还是没有思路,认为是容斥什么的直接计算,完全想不到概率DP大致思路如下:正难则反,统计填满数后相同的数小于l的情况设dp[i][j]表示前i个数占据j个位置的方案数(且每个数占据的位置小于l)该状态可由前i-1个数占据j-min(j,l)+1 ~ j个位置转移而来,保证第i个数占据的位置小于l则状态转移方程为:dp[i][j]=∑dp[i-1][j-k]*c(m-j+k,k)

2016-05-03 23:17:31 403

原创 SGU-495 Kids and Prizes(概率DP)

最终期望是每个人拿到奖品的概率之和,考虑同时只存在一个人拿到盒子第i个人拿到奖品的概率与前一个人拿到奖品的概率有关,所以设dp[i]表示第i个拿盒子的人拿到奖品的概率则dp[i]可由两个状态转移而来:①第i-1个拿盒子的人拿到奖品,概率为dp[i-1],则第i个拿盒子的人拿到奖品的概率为:dp[i-1]-1/n②第i-1个拿盒子的人没有拿到奖品,概率为1-dp[i-1],则第i个拿盒子的人拿到奖品的概率为:dp[i-1]可得:dp[i]=(1-dp[i-1])*dp[i-1]+dp[i-1]*(d

2016-05-02 22:17:20 498

原创 HDU-4864 Task(贪心)

解法一:排序+贪心大致思路:很容易就能想到排序贪心,但是贪心还有技巧,否则就不能取得最大值首先x值大于任务的机器均可以使用一次,若存在x大于任务的机器,则该任务必定会执行,因为500*x不会小于后面任务所得,则难点就在如何在众多符合要求的机器中选择此时再考虑y值,由于未被选择的机器可以在后面的任务中使用,所以为了得到最优解,当前任务必定匹配y值大于它的y值且最接近的那一台机器

2016-05-02 20:58:58 499

原创 HDU-4856 Tunnels(BFS&&状压DP)

大致思路:先bfs预处理出任意两点的最短路,然后就转换为TSP问题,由于必经的隧道很小,所以可以用状压DP设dp[i][j]表示当前i中二进制中为1的位已经走过,且最后一个走过的隧道为第j条隧道【注意】必须把表示走过的某些隧道这个状态放在最外层,把隧道放在最内层,WA在这2.5h,还是不太熟悉状压DP只有这样才能保证当前使用的状态是最优状态,否则就限定了部分遍历隧道的顺序①若未遍历的隧道在最外层,则限定了最后一个必定经过第m-1条隧道②若已遍历的隧道在最外层,则限定了倒数第二个必定经过第m-1条隧

2016-05-02 17:32:31 448

原创 HDU-4850 Wow! Such String! (构造)

Wow! Such String!http://acm.hdu.edu.cn/showproblem.php?pid=4850Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Special JudgeProblem DescriptionRecently...

2016-05-02 15:00:06 751 4

原创 POJ-1456 Supermarket (贪心)

大致思路:贪心即可,每次挑选价格最高的物品,看在保质期内是否有未被占用的天,如果有在占用该天卖出该物品,否则找下一个即可。可以用并查集的思想,更新离保质期最近的合法天刚开始pre数组和vis数组初始化的范围不对,导致WA了很多次。

2016-05-02 12:53:45 619

原创 Codeforces-148D Bag of mice (概率DP)

大致思路:设p[i][j]表示公主在有i只白鼠,j只黑鼠时先手获胜概率,p[i][j]表示恶龙在有i只白鼠,j只黑鼠时先手获胜概率则状态转移方程为:d[i][j]=i/(i+j)+j/(i+j)*(1-(i/(i+j-1)*p[i-1][j-1]+(j-1)/(i+j-1)*p[i][j-2])); p[i][j]=i/(i+j)+j/(i+j)*(1-d[i][j-1]);即:d[i][j]=1-(i*j*p[i-1][j-1]+

2016-05-02 10:05:45 473

原创 POJ-2151 Check the difficulty of problems (DP)

可以用dp求得每支队伍做出k道题的概率设dp[i][j][k]表示第i只队伍在前j题中做出k题的概率则状态转移方程为:dp[i][j][k]=(1-p[i][j])*dp[i][j-1][k]+p[i][j]*dp[i][j-1][k-1];由于是每个队伍相互独立事件,所以直接相乘即可总是想着正面求解,而忘了正难则反的原理首先统计每个人至少做出一题的概率:prob_1=1-∏dp[i][m][0];再统计每个人做出的题目数目均在1~n-1之间的概率:prob_2=∏(∑dp[i][m][k])

2016-05-02 00:23:34 363

原创 ZOJ-3640 Help Me Escape (概率DP)

状态没设对,导致直接没法转移应该设dp[f]表示战斗力为f时,逃离时经过的天数的期望则:①f>c[i]时,本次能从i点逃离,dp[f]=t[i]/n;②f<=c[i]时,本次不能从i点逃离,dp[f]=∑(dp[f+c[i]]+1)/n;由于各状态是离散的,所以只能通过dfs进行状态转移

2016-05-01 21:41:15 498

原创 POJ-3071 Football (概率DP)

设dp[i][j]表示在第i轮,队伍j胜出的概率则dp[i][j]=∑(p[j][k]*dp[i-1][j]*dp[i-1][k]),k为在第i轮可能会和j比赛的队伍然后不知道怎么计算什么队伍之间会在第i轮比赛看了题解后发现可以运用位运算,队号从0开始观察规律(以0号队伍为例):第一轮:(0,1)第二轮:(0,2),(0,3)第三轮:(0,4),(0,5),(0,6),(0,7)……第i轮能够比赛的队伍,他们从第i+1为开始均相同,而第i位均不同,所以可以对队号先右移i-1位,再让其中一个

2016-05-01 21:02:18 348

原创 HDU-3853 LOOPS (概率DP)

设dp[i][j]表示从(i,j)开始到达目标状态时消耗魔力的期望,则dp[r][c]=0;状态转移方程为:dp[i][j]=p1*(dp[i][j]+2)+p2*(dp[i][j+1]+2)+p3*(dp[i+1][j]+2);解得:dp[i][j]=(p2*dp[i][j+1]+p3*dp[i+1][j]+2)/(1-p1);写的时候觉得不能写成“人人为我”型,导致有个常数,时间较长,其实直接从(r,c)开始枚举即可。。。(但是时间并没有快多少)【注意】如果非(r,c)点,p1为1时,则不会进入

2016-05-01 20:19:42 363

原创 POJ-2253 Frogger (最短路)

可以按照Dijkstra的思想,设dis[i]表示从1到i点的所有路径中,最长边最小的长度,每次不更新最短路,只更新1~i的路径上最长边最小的长度即可【注意】POJ中,double在G++下需要用%f输出,又被坑了好久。。。

2016-05-01 19:30:48 427

原创 HDU-4599 Dice (概率DP)

设dp[i]表示已经连续掷出n次同一个数字时,离目标状态还需掷骰子次数的期望,则dp[n]=0,dp[0]=dp[1]+1则状态转移方程为:dp[i]=1/6*(dp[i+1]+1)+5/6*(dp[1]+1); ①有两种方法可求得dp[0]方法一:设参数a[i],b[i],使得 dp[i]=a[i]*dp[1]+b[i]; ②②带入①右边

2016-05-01 16:34:58 418

原创 HDU-4497 GCD and LCM (数学)

只知道应该将l/g分解成素数的次方之积(后来才知道是 整数唯一分解定理),但是不知道如何给这三个数分配各素数看了题解才明白,要学会分析设l/g中某一素数p的指数为cnt,则只有满足这三个数中至少有一个数的p的指数为cnt(否则最小公倍数不是l),至少有一个数的p的指数为0(否则最大公约数不是1)共三种情况:①一个数的p的指数为cnt,一个数的p的指数为0,另一个数的p的指数取1~cnt-1,方案数为:C(3,1)*C(2,1)*(cnt-1) ②两个数的

2016-05-01 09:39:17 474

原创 HDU-4597 Play Game (区间DP)

设dp[i][j][k][l]表示先手从a数组区间[i,j]中以及b数组区间[k,l]中能选得的最大数字和则dp[i][j][k][l]可由四个状态转移而来:①先手拿a[i],由dp[i+1][j][k][l]转移而来,即 a[i]+sum(i+1,j,k,l)-dp[i+1][j][k][l];②先手拿a[j],由dp[i][j-1][k][l]转移而来,即 a[j]+sum(i,j-1,k,l)-dp[i][j-1][k][l];③先手拿b[k],由dp[i][j][k+1][l]转移而来,即

2016-05-01 00:17:05 547

空空如也

空空如也

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

TA关注的人

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