摘要:设d[i] 为 第i只牛到第1只牛的距离 根据题意有: d[1] = 0; d[b] - d[a] = D(ml) d[b] – d[a] = D(md) d[i] – d[i-1] = 0 题目说牛是从1~n排列下去,这是题目隐藏的条件,刚开始没有加这个条件也能ac d[i] – d[1] = 0 (1= i = n) 以1为源点开始搜索,d[n]就是答案,当d[n] = ...
阅读全文
摘要:这几天学了差分约束,总结一下。 先从百度百科摘录差分约束系统定义: 如果一个系统由n个变量和m个约束条件组成,其中每个约束条件形如xj-xi<=bk(i,j∈[1,n],k∈[1,m]),则称其为差分约束系统(system of difference constraints)。亦即,差分约束系统是求解关于一组变量的特殊不等式组的方法。 差分约束可以转化话单源最短路求解。因为单源最短路径满足三角不等式d[v] <= d[u] + w(u, v), 这里的 <= 可以为改 >= 只要改变一下初始化条件即可。 差分约束题目有两种,一种求最大值,另外一种求最小值。 (1)当题目
阅读全文
摘要:刚看了强连通分量,找来些题练练。发现强连通不会赤裸裸地考,会结合一些其它知识。 这题做得比较曲折,一开始没有强连通,对反向图的每个点进行一次dfs, 发现超时,后来用了强连通,弄了很久才弄出。 解题思路:先把强连通分支压缩成一个点,再组成一个有向无环反向图, 对每个入度为0的点进行dfs, 找出最大的值即可。注意到,答案只能是在反向图入度为0 的点中。
阅读全文
摘要:这题简单的最短路,一开始我还傻傻地去用bfs写,WA了几次后,发现用错方法了,用bfs求最短路,是对每条边权值都相同的图才可以的,后来改用单源最短路径, 这题数据规模比较大(a,b去到1000)不能用floyd算法。
阅读全文
摘要:杭电这题,也是逆序数,规模比poj小很多,可以不用归并,直接暴力统计。 这题要求最小的逆序数,开始每次序列都重新用归并算一次,发现超时了,后来看了别人解题报告发现原来可以利用一开始计算的那个逆序数。这题比较特别,输入的n个数是0~n-1的。 从该数字hold[i]就可以知道比它小的数有hold[i]个,比它大的数有n-1-hold[i]个. 每次把hold[i]放到最后时,ans = ans...
阅读全文
摘要:今晚学习了逆序数,基本上照着别人的程序写的。利用归并排序来统计逆序数。 当归并两条有序链时,可以同时计算逆序数。 当left=i=mid,mid+1=j=right,如果有a[i]a[j],这样的说明在a的前段中i...mid的元素都比a[j]大,于是逆序数+=mid-i +1;如果a[i]a[j],这样的发生说明属于正常排序. 这题如果是用O(n^2)的方法统计会超时,注意要用...
阅读全文
摘要:这题一开始看不知如何dp,看了别人的解题报告才知道是数塔的变形 dp[i][j] 表示从i~n秒第j个位置获得的最多馅饼数 dp[i][j] = max (dp[i][j], dp[i+1][j-1], dp[i+1][j], dp[i+1][j+1])
阅读全文
摘要:这题是看杭电acm课件做的,和一维的最长有序子序列差不多。 先按mice的重量为第一关键字升序排序,再按mice的speed按降序排序,然后开始dp 对杭电课件那个记录数组的意义不理解。 num[i]是记录从0~i个mice的最长子序列,num[i] = max (num[j]+1, num[i]) , 0= j i 一开始用string保存路径输出,不断地WA,想了很久,才发现问题...
阅读全文
摘要://状态方程为c[n] = max(c[n-1]+a[n], a[n])//c[0] = a[0]#include iostream#include stdio.h#define MAX 10005using namespace std; int main(){ int a[MAX]; int c[MAX]; int hold_start[MAX]; //保存起始点 int n; whi...
阅读全文
摘要://记忆化搜索//从最底层开始向上搜索,每次保存最大的值#include<iostream>#define MAX 101using namespace std;int a[MAX][MAX];int main(){ int cases; int height; cin >> cases; int c[MAX]; int b[MAX]; while (cases--) { ...
阅读全文
摘要:看了动态规划,对dp有个大概理解,这题之前一直卡着,刚开始还用搜索做~ 要注意对0的处理,开始把方程列错,WA数次 dp方程为 a[n] = a[n-1]+a[n-2],输入的字符串一次为X1X2X3…Xn… 当Xn = 0时,a[n] = a[n-2] 当Xn != 0时, 若X(n-1)与X(n)组成的数大于26, a[n] = a[n-1]. 若X(n-1)与X(n)组成的数=...
阅读全文
摘要:#include <iostream>#include <string.h>#define MAX 1005using namespace std;char result[MAX];char a[MAX];char b[MAX];int result_size;void add();int main(){ int n; while (cin >> n) { c...
阅读全文
摘要:运用蔡勒公式,注意取模用法~~~w = (w%7+7)%7 因为这个WA了好几次 #include iostream#include stdio.husing namespace std; int main(){ int y, m, d, c, w; int re_d, re_m, re_y; int cases; int interval; int month[13] = {0, 3...
阅读全文
摘要:很简单一道题,高精度判断能否被11整除, WA了好几次,发现输入0 0 时原来要输出YES~
阅读全文
摘要:刚开始还打算用map,后来发现,按x第一关键字, y第二关键字排序即可, 感觉有点像基数排序#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;#define MAX 1000000struct per{ long x,y;};per num[MAX];boo...
阅读全文
摘要:这题做得无比纠结~~~WA了无数次,一开始以为算法错了, 调了半天发现不了问题, 最后还是看别人解题报告才过, 原来当输入的S和T不在列表且S=T时,是要输出0的,这个要注意~~ 主要是用一个map把字符串映射到数字#include <iostream>#include <string>#include <map>#include <memory.h>#define INF 1000000#define MAX 210using namespace std;int cost[MAX][MAX];int my_distance[MAX];bool
阅读全文
摘要:这题就是个杯具~~~简单的dfs, WA了无数次,后来发现是因为每次cases忘了重新把vector数组clear掉,晕死~~~
阅读全文
摘要://Prim算法#include <iostream>#include <memory.h>#define INF 1000000#define MAX 200using namespace std;int main(){ int arcs[MAX][MAX]; bool isvisit[MAX]; int min_weight[MAX]; int N, Q; int x,...
阅读全文
摘要:题目是求最长的边,在生成最小生成树时,用一个变量保存最大的值即可
阅读全文