自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 初涉树链剖分 hrbust 2065

一般适用于对于树的区间查询与修改。几个定义:树链:树上两点之间的路径。剖分:将树上的边划分为轻边和重边。重儿子:在 u 的儿子节点中,siz最大的那个节点即为 u 的重儿子。(若存在多个,则任选一个)轻儿子:除重儿子之外的所有儿子节点均为轻儿子。重边:父节点与重儿子之间的连边。轻边:父节点与轻儿子之间的连边。重链:由重边首尾相连组成的路径。操作之前需

2014-03-27 19:58:23 829

原创 SDUT 2838 Word ladder 图的直径

昨天周赛H题。。。当时第一发的时候手残了,改正之后发现好像题意不太对,感觉是找最长的一条没有重点的链,又是一张有环的图,不会做,果断放弃去切了另外一个题。之后也没有再读题,也没有分析样例。。。。直到赛后学姐说是找最短路中的最长路,我才发现自己跑偏了。。也就是说,设P(i,j) 表示 i 到 j 的最短路的长度,则答案为 anw = max( p(i,j) )(i != j)。其实此时 anw

2014-03-23 12:23:42 853

原创 HDU 4597 Play Game 记忆化搜索

这道题还是去长春之前看的,当时以为是博弈什么的。后来学长是记忆化搜索,当时连简单的DP都不会,只好先扔到一边了。dp[s1][e1][s2][e2] 表示第一排剩[s1,e1] ,第二排剩 [s2,e2] 时的最优决策。dp[s1][e1][s2][ e2 ] = sum - min(dfs(s1,e1,s2+1,e2),dfs(s1,e1,s2,e2-1),dfs(s1+1,e1,s2,

2014-03-22 20:53:37 869

原创 TopCoder SRM 613 Div.2 C DFS+剪枝

昨天刚做了一个搜索题,感觉和这个的剪枝方法很像。当把剩下的数都选上时依然满足条件,则用组合数优化。sta[i] 标记的为 从第 i 个到 第 n 张牌一共出现多少个数,最多五十个数,状压就好了。STL 真心不会调试。。#include #include #include #include #include #include #include #include #p

2014-03-22 10:43:22 1186

原创 HDU 3442 Three Kingdoms BFS + 优先队列

已被周赛虐成挂零狗。    BFS + 优先队列 == 最短路,貌似是可以这样理解的。这样得到的结果即为花费最少的一条路。貌似初级计划里面有一个类似的题。    因为受过的伤不会再受,所以需要抽象出第三维来表示受过的哪几种伤(状压)。寒假集训的时候还给大一的选手出过这种题。。。竟然还有脸给大一的讲题。。#include #include #include #inc

2014-03-21 12:33:52 1148

原创 URAL 1495. One-two, One-two 2

dp[ i ][ j ] 表示 长度为 i 的 对 n 取余为 j (若 j == 0 , j = n) 的最优解。mod[1][ i ] 表示1 * (10)^(i-1) 对 n 取余的余数,若 (mod[1][ i ] == 0 ,则 mod[ 1 ][ i ] = n)。mod[2][ i ]同理。状态转移方程 dp[ i ][ j ] = min(dp[ i-1 ][j - mod

2014-03-18 12:32:51 898

原创 CodeForces 402D Upgrading Array

好像没有什么要说的,主要是两个数组的数据范围太大,要做好优化,避免因子的重复计算。预处理:首先计算出 a[] 初始时的 Max = sigma f(a[i]) (1 然后,对于 a[i] ,计算出所有的 gcd[i] ,可以从左边开始递推,时间复杂度o(n).从gcd[n] 开始往左遍历,若f( gcd[ i ] ) 继续枚举 i ,若 f(gcd[i] / gcd[site]

2014-03-17 09:54:47 1101

原创 ZOJ 3697 Bad-written Number

dp[ i ][ j ] += dp[ i-1 ][ k ],match(j,k). 与其说是DP,不如说是模拟题。第一个和最后一个数字要单独讨论,中间的要符合剩下的条件:中间一列和剩下的两列中的 ‘| ’要全部符合输入状态。且衔接部分要取 '|' 的并集,且并集要与输入状态相同。第一个数字要前两列全部符合输入状态,最后一个数则要后两列。  为毛已到周赛就各

2014-03-15 19:23:08 1232

原创 URAL 1900. Brainwashing Device

乍看此题,还以为是扫描线+贪心,每次都扫描出最多的那个站,但是时间复杂度太高,而且写到一半的时候发现了反例. . . . . 接下来开始推式子:dp[ i ][ j ] = max(dp[ k1 ][ j ],dp[ k2 ][ j -1] + ans[site[ k2 ][j-1]+1][i])。k1

2014-03-15 12:43:23 1081

原创 URAL 1513. Lemon Tale 好多大数

dp[ i ][ j ]表示长度 i ,末尾连续 j 个L的方案数。dp[ i ][ 0 ]  = sigma dp[ i - 1 ][ j ] (0 dp[ i ][ j ] = dp[ i-1 ][ j-1 ] ( j != 0 && j 这是最简单明了的递推式子,可是时间复杂度为o (n*m),显然难以胜任。通过对式子观察,第 dp[ i ] 对于 dp[ i-1 ]只多

2014-03-13 18:16:00 932

原创 POJ 3254 Corn Fields 矬到荼蘼的状压DP

dp[ i ][ j ] += dp[i+1][ k ] (j,k两种状态均合法)。留着写XXX论文。#include #include #include #include #include #include #include #include #pragma comment(linker, "/STACK:1024000000");#define LL long lo

2014-03-11 15:15:28 759

原创 URAL 1427. SMS

dp[ i ] 表示前 i 个字符的最优解。if( s[i] 为 latin letter || space){if(如果前 (i-1) 个字符的后 m 个 全部为latin letter || space)dp[ i ] = min(dp [i-k]) + 1;(1 elsedp[ i ] = min( min(dp[ site + k1 ]) , min(dp[i-k2

2014-03-10 15:03:55 960

原创 Ural 1287. Mars Canals

突然感觉Ural的难度分类有点扯. . . . . . dp[ i ][ j ][ k ] 表示在第K个方向上连续的个数。#include #include #include #include #include #include #include #include #pragma comment(linker, "/STACK:1024000000");#define

2014-03-09 20:11:31 837

原创 ZOJ 3488 Conic Section

这种题都不会可以滚回高中了好吗?!比赛结束前十秒get了这张图。。#include #include #include #include #include #include #include #include #pragma comment(linker, "/STACK:1024000000");#define EPS (1e-8)#define LL long

2014-03-09 18:25:42 1151

原创 URAL 1036. Lucky Tickets java.math.BigInteger模板

状态转移方程:dp[ i ][ j ] = dp[ i ][ j ].add(dp[ i-1 ][ j-k ]);比以前懒了。。。。贴个大数的模板留着以后用。做DP的时候一定要找出状态转移方程的边界之后再开始敲哇。import java.io.*;import java.math.BigInteger;import java.util.Scanner;public class M

2014-03-05 20:34:12 1140

原创 URAL 1018. Binary Apple Tree

左手也能单手俯卧撑啦!!哈哈哈!!——————————————————————————————算是最基础的树形DP了吧。dp[ i ][ j ] 记录第 i 个节点删除 j 个树枝时的最小值,ans[ i ]记录 i 节点 的 j 的取值范围。设l,r为 i 的子节点,则dp[ i ][ j+k ] = min(dp[ l ][ j ] +dp[ r ] [ k ])。若

2014-03-03 23:33:59 787

原创 URAL 1658. Sum of Digits

做完这个题就一个感觉——智商捉鸡。虽然题目中的 1 好了,发现这个坑开不出数组的问题就解决了。然后试着用BFS来解决,没想到会TLE,感觉节点也不是很多唉。然后感觉像是二维背包,dp[ i ][ j ] = min(dp[ i-x ][j - x*x]+1), 1 然后继续TLE,然后试着写成记忆化搜索的样子,试着剪枝。然后写错了,这里要特别提一下,就是当一种子状态的最优解确定

2014-03-03 11:35:03 965

空空如也

空空如也

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

TA关注的人

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