05 2016 档案
摘要:BFS 听上去蛮简单的,实际编程复杂度较高(至少一个快睡着的人是这么认为的...) 抄的题解(感谢题解的作者<'_'>):
阅读全文
摘要:dp 数据:d[i].a d[i].b d[i].v 分别表示第i条线段的起始点,结束点,价值 先按d[i].b排好序 dp[i]表示前i条线段的最大价值 方程: dp[i]=max{ dp[i-1] d[i].v dp[p]+d[i].v p<i,d[p].b<=d[i].a AND p最大 }
阅读全文
摘要:slove(num,A,b,C)表示把1~num的盘子从A经过B移动到C 首先把solve(num-1,A,C,B) 然后移动num到C 最后solve(num-1,B,A,C) 即可 代码:
阅读全文
摘要:贪心 把线段们按终止点b的先后排序,b小的在前面,b一样随便 然后设r为当前最大的b 每加入一条新的线段i,判断是否重合(i.a>=r) 如果重合就舍弃i,否则把i加入,ans++,更新r:r=i.b 证明: 加入有这样几条线段: 1: 2: 3: 4: 请问1、2、3是重合的,你选那条? 一定是选
阅读全文
摘要:1. m进制转换10进制 把m进制的第k位分别乘以m^(k-1),求和即可 如二进制1011转换成10进制: ans = 1*2^3 + 0*2^2 + 1*2^1 + 1*2^0 = 8+0+2+1 = 11 如十六进制D6B转换为10进制: ans = D*16^2 + 6*16^1 + B*1
阅读全文
摘要:首先,对图进行一次Floyd(g[][]是图) 1.dfs:(u是当前在的节点,d是已经走的路程) 起初我认为n<=15是dfs完全可以解决的,但是忽略了一个问题:每对城市之间都可以互相到达,边特别多,结果TLE ^_^; 正解是压缩状态的dp: dp[u][s]表示状态:走到u这个点并且前面已经走
阅读全文
摘要:划分dp 注意环形,需要把原数复制成两份再进行,详见: http://www.cnblogs.com/FuTaimeng/p/5427426.html 初始条件:dp[i][i]=0 转移方程:dp[i][j] = max/min{ dp[i][u]+dp[u+1][j]+sum(i,j) } 答案
阅读全文
摘要:数字三角形的新变种 设要经过的点为x y,那么dp[x][k] = -Max k=1~x and k!=y 其他一样:dp[i][j] = max(dp[i-1][j],dp[i-1[j-1])+a[i][j] 代码如下:
阅读全文
摘要:第一次走用dfs枚举每种情况,第二次走用dp求剩下的最大值 设一个点集q用来保存有价值的点,排序,在最后加一个终点:x=m+1,y=m+1,v=0 //m是矩阵长宽 因为v=0的点是没有意义的,所以忽略它们,用q进行dfs 设当前点在q中的下标为p,已经积累的分数为score: 当p=n+1时,到了
阅读全文
摘要:dfs+dp dfs枚举每种情况,每层递归确定第k个数i:i = a[k-1]+1 to a[k-1]*n+1 当枚举完一个序列时,使用check()测试它能达到的max 使用dp。设dp[i]为凑成面值为i的最少张数 注意dp[i]一开始要设成最大值 代码如下: By the way:a[1]一定
阅读全文

浙公网安备 33010602011771号