摘要:杭电这题,也是逆序数,规模比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,...
阅读全文
摘要:题目是求最长的边,在生成最小生成树时,用一个变量保存最大的值即可
阅读全文
摘要://hdu1879 还是畅通工程#include <iostream>#include <algorithm>#define MAX 5000using namespace std;int father[MAX];int my_rank[MAX];void make_set(){ for (int i = 0; i < MAX; i++) { my_rank[i]...
阅读全文