04 2012 档案

UVa 825 - Walking on the Safe Side
摘要:假期放松,做几道小题……这道题的输入比较不同:每行输入的数的个数是不确定的,所以要使用gets和sscanf();开始想偷懒,看了看Stainger大牛的输入也是这样,就没啥可说了,麻烦些就麻烦些;状态转移比较明显,递推可以解决,感觉这道题与其说是dp的,不如说是用来练习输入的;1WA,原因是最后一组输出后不要留空行(留换行);使用了 OIer 常用的写法:把程序每一部分独立起来,确实是方便了调试(在递推时 i 没有初始化,找了很久,最后一块一块注释,发现的)。# include <stdio.h># include <string.h># define N 105in 阅读全文

posted @ 2012-04-30 10:24 getgoing 阅读(508) 评论(0) 推荐(0)

POJ 1338 Ugly Numbers
摘要:Ugly Number可以表示为 [i, j, k] , i,j,k 分别表示 2 3 5 因子的个数;估计一下 i<=12 j <= 12, k<=12内有超过2000个,30^12 < 2^60,在long long 以内;关键是要按大小次序来,DISCUSS中有个大牛提了个很好的方法,我是按照他的方法来写的,0MS。# include <stdio.h># define MIN(x, y) ((x)<(y) ? (x):(y)) long long t[1505];int main(){ int i, j, k, p; t[0] = 1; i = 阅读全文

posted @ 2012-04-27 15:04 getgoing 阅读(247) 评论(0) 推荐(0)

[笔记-柔性字符串匹配]Shift-And与Shift-Or
摘要:Shift-And 和 KMP一样都是基于前缀搜索的方法,复杂度为O(n);《柔性字符串匹配》: "只有当模式串小于8时,KMP才比基于后缀和基于子串的搜索方法有效。而在这个范围内,Shift-And算法和Shift-Or算法能够在所有机器上运行,速度至少是Knuth-Morris-Pratt的两倍,并且更易于实现。"Shift-And对字母表中的每个字符构造一个位序列,根据下面的公式更新匹配状态D:D = ((D<<1) | 0^{m-1}1) & B[t_{i+1}];B[t_{i+1}]是字符t_{i+1}的位序列,当D的第j位为1并且t_{i+1 阅读全文

posted @ 2012-04-27 13:11 getgoing 阅读(772) 评论(0) 推荐(0)

要读的书
摘要:线段树树状数组后缀数组DFA柔性字符串匹配C 与指针C 专家编程计算机程序设计艺术C++ Primer 阅读全文

posted @ 2012-04-25 20:27 getgoing 阅读(205) 评论(0) 推荐(0)

COJ 1106 幻想乡的路
摘要:题意:若第二小生成树代价与最小生成树代价相等输出Not Unique!,否则输出最小代价;对最小生成树的每一边标记后重新计算不含这条边的最小生成树,若代价与 MST 的相等说明有多种方案,复杂度为O(N^3)。# include <stdio.h># include <string.h># define N 20005typedef struct{ int u, v, w;} Road;char f[N], use[N];int n, m, p[205];Road r[N];int cmp(const void *x, const void *y){ return (* 阅读全文

posted @ 2012-04-23 18:03 getgoing 阅读(276) 评论(2) 推荐(0)

COJ 1082 Farmer John’s Cow
摘要:本来想水过的,结果提交了2次都是WA,就沉下心了;类似fib数列,写出几项,可以猜测递推公式为f[n] = f[n-1] + 2×f[n-2],稍加分析:正确;稍作变形有:1. f[n] + f[n-1] = 2×(f[n-1] + f[n-2])2. f[n] - 2×f[n-1] = -(f[n-1] - 2×f[n-2])所以可以求出 f[n],这里使用第一个式子得到了f[n] + f[n-1] = 2^(n-1),所以 f[n] = 2^(n-1) - f[n-1],2的幂可以使用移位,没问题吧;题目中0<n<65,所以这样做会遇到2 阅读全文

posted @ 2012-04-23 16:24 getgoing 阅读(234) 评论(2) 推荐(0)

COJ 1196 Staginner 去爬山
摘要:……;给出可以走的位置,问最多能爬多少层,使用dp,这道题有点不同的是还可以往下走,而常见的大都是递推,需要多加一个条件,谢谢Staginner大牛的指点!dfs可能会超时(深度太大)?为什么使用C++提交而不是C?在COJ上遭遇过使用C比C++耗时超出3s的经历(时限是5s)。# include <stdio.h># include <string.h># define N 105 char map[N][N];int n, m, f[N][N]; int dp(int i, int j); int main(){ int i, j, h; while (~scanf 阅读全文

posted @ 2012-04-23 16:11 getgoing 阅读(424) 评论(2) 推荐(1)

HDOJ 1874 畅通工程续
摘要:单源最短路径,Dijkstra,参考白书的写法;注意INF不能定义为0x7fffffff,因为后面相加可能会溢出,题目中距离最大为10000;这道题的变态之处在于有重边,遇到重边时需要更新w[i, j]和w[j, i],WA多次,15ms。# include <stdio.h># include <string.h># define INF 0x10ffffffint main(){ int k, i, j, n, m, s, t; char v[201]; int x, d[201], w[201][201]; while (~scanf("%d%d&quo 阅读全文

posted @ 2012-04-22 14:46 getgoing 阅读(259) 评论(0) 推荐(0)

HDOJ 1875 畅通工程再续
摘要:示例的结果为1414.0,kruskal的返回类型写成了int,查了好几遍都没发现问题;还是MST,kruskal,并查集,路径压缩;# include <stdio.h># include <stdlib.h># include <math.h># define MAXN 105typedef struct{ int u, v; double d;} Bridge;int m;int p[MAXN], a[MAXN][2];Bridge b[MAXN*50];double kruskal(int n);int find(int x){ return x== 阅读全文

posted @ 2012-04-22 13:46 getgoing 阅读(484) 评论(0) 推荐(0)

HDOJ 1879 继续畅通工程
摘要:依然是:MST, kruskal,并查集,路径压缩;在LD下的CB中老是提示segmentation fault,不知什么错误,回到win运行一闪而过而没有输出,查了半天发现查函数有一处错误,继续,仍然无输出,怀疑变量命名错误,更改,仍然无输出,最后发现文件保存的路径和输入文件的路径不一致,怎么样,流水账记得不错吧?500MS,看了排行榜上没有0MS的,明白这道题500MS不算浪费时间。# include <stdio.h># include <stdlib.h>typedef struct { int u, v; int w;}Road;int m, n, p[105 阅读全文

posted @ 2012-04-22 12:38 getgoing 阅读(307) 评论(0) 推荐(0)

HDOJ 1863 畅通工程
摘要:MST,kruskal,并查集,路径压缩;参考白书的做法:另定义一个边序号数组,排序时按照边权的大小排;1A,表示已经对WA,TLE,RE等过敏,一提交心里就发毛啊……代码有点长,重新回到 CB 不太适应。# include <stdio.h># include <stdlib.h># define MAXN 105int n, m;int w[MAXN], u[MAXN], v[MAXN], r[MAXN], p[MAXN];int kruskal(void);int cmp(const void *x, const void *y){return (w[*(int* 阅读全文

posted @ 2012-04-22 10:10 getgoing 阅读(315) 评论(0) 推荐(0)

COJ 1174 Shining Gems
摘要:玩过这个游戏,这个题是判断当前局面是属于哪一种:有三个连在一块,换一个位置后有三个连着,其他情况;思路有两种:对每一个位置枚举周围所有可能的情况,然后判断,或者对每一个位置移动前后行和列的情况进行判断;如果使用前一种,可能遭遇大量的判断,难以保证能考虑全所有情况,代码也显得很长,后一种代码稍短,相对好写一点;924MS,怎么没卡一下?# include <stdio.h>const int d[4][2] = {{-1,0},{0,1},{1,0},{0,-1}};int n, m, f0, f1;char f[1005][1005];int check(int i, int j) 阅读全文

posted @ 2012-04-21 09:53 getgoing 阅读(303) 评论(0) 推荐(0)

COJ 1172 Generating Queue
摘要:经过 Staginner 大牛的悉心指点,终于AC了(虽然那个测试数据有点小小的问题);dp好题(对于像我这样的初学者来说,是一道有新意的题);# include <stdio.h># include <string.h># define MAXN 1005int n;char g[MAXN], s[MAXN], f[MAXN][MAXN];int dp(int i, int j);int main(){ int i; while (~scanf("%d", &n)) { for (i = 1; i <= n; ++i) s... 阅读全文

posted @ 2012-04-20 13:15 getgoing 阅读(257) 评论(0) 推荐(0)

COJ 1170 A Simple Problem
摘要:题目:在一个由N个整数组成的数列中,最多能找到多少个位置连续的整数且其中的最大值与最小值之差不超过K呢?GDKOI 2003 又一道很类似的题(河床)使用的是动态规划,因为数据范围较小(复杂度为O(nk)),这里10^6*10^6肯定超时(确实TLE了);这里使用一次扫描,加上单调队列,将复杂度降为O(n)(每个元素最多只进队一次,最多只出队一次),当然不是自己的思路……详见“CSU_BMW正式组建纪念赛”解题报告以及COJ1170(A Simple Problem)这两篇,LJ大牛的代码比较清晰;WA无数次,TLE多次,RE两次,魔法值-50。。。# include <stdio.h& 阅读全文

posted @ 2012-04-19 22:39 getgoing 阅读(688) 评论(0) 推荐(0)

POJ 1007 DNA Sorting
摘要:题意:给出 m 个长度都为 n 的字符串,按照逆序数的大小排序输出;简单的排序题,逆序数的计算,qsort练习;求逆序数有好的方法(O(n)),这里直接算也是0MS。# include <stdio.h>typedef struct { char s[51]; int w, id;}DNA;int m, n;DNA a[101];int DNA_cmp(const void *x, const void *y){ int tmp = (*(DNA*)x).w - (*(DNA*)y).w; if (tmp < 0) return -1; if ((tmp == 0... 阅读全文

posted @ 2012-04-17 11:44 getgoing 阅读(317) 评论(2) 推荐(0)

POJ 1088 滑雪
摘要:给出一个R×C的地图,以及每个点的海拔,问下降序列最长多大?简单的DP,记忆化搜索;dp(i, j)if f[i, j]已经计算过 return f[i, j];f[i, j] = 1;for i = 1:k (ni, nj) = (i, j) + d[k]; if (ni, nj)合法 && h[i, j] > h[ni, nj] then f[i, j] = dp[ni, nj] + 1;return f[i, j];/* 滑雪:简单dp */# include <stdio.h># include <string.h># defin 阅读全文

posted @ 2012-04-16 23:29 getgoing 阅读(1178) 评论(0) 推荐(1)

coj 1140 序号互换
摘要:进制转换,注意边界(WA 5次)。测试数据:26 27 52 160 Z FD结果: Z AA AZ FD 26 160# include <stdio.h># include <ctype.h># include <memory.h> char a[15];char s[15]; int main(){ int T, i, n; scanf("%d", &T); while (T--) { scanf("%s", a); if (isdigit(a[0])) { i = 0; n ... 阅读全文

posted @ 2012-04-14 18:53 getgoing 阅读(379) 评论(0) 推荐(0)

coj 1100 Magic Spell
摘要:这道题的HINT彻底把我弄糊涂了,结果WA5次才发现是求最大子序列而不是连续子串:HINT子序列的定义:字符串S中从S[ i ]...S[ j ]的长度为K的字符(i<=j),k<=j-i+1。# include <stdio.h># include <memory.h># define MAX(x, y) ((x)>(y) ? (x):(y))# define MAXN 1020int len1, len2;char s1[MAXN], s2[MAXN];short int f[MAXN][MAXN];int main(){ int i, j, ma 阅读全文

posted @ 2012-04-14 00:16 getgoing 阅读(214) 评论(0) 推荐(0)

coj 1224 ACM小组的古怪象棋
摘要:这道题的变态之处在于有下述的“蹩蹄”的情况出现,据不完全统计,24次非WA提交中,有15次左右是我的,多亏了LJ大牛及时指出这道题的陷阱。BFS或者DP,要注意会出现“蹩蹄”的情况(题目提都没提)。DP相对容易一些(记忆化搜索),要注意的一点是可能出现马永远无法到达将的位置,这时可能会出现两个状态相互调用以致出现死循环,解决的办法是:初始化时所有状态都定义为-1(将的位置定义为0,因为不许要移动),在求当前状态时,如果没有搜索过,首先将该状态置为+INF,这样及时无法搜索道,当结束时,依然为INF……这样对吗?经过验证,发现只要棋盘的行和列都大于等于4,那么马可以从任意位置出发经若干步到达任意 阅读全文

posted @ 2012-04-13 18:00 getgoing 阅读(473) 评论(0) 推荐(0)

UVa 10404 - Bachet's Game
摘要:乍一看是博弈,也是看了大牛们的思路才会的。。在确定当前状态时,前面所有的状态都确定了,如果能通过移动一步到达核结点,那么当前局势必胜。 1 # include <stdio.h> 2 # include <memory.h> 3 # include <stdlib.h> 4 5 # define INDEX(i) ((i)>>3) 6 # define OFFSET(i) ((i)&0x7) 7 8 # define get_bit(i) ((f[INDEX(i)]>>OFFSET(i)) & 0x1) 9 # def 阅读全文

posted @ 2012-04-13 14:21 getgoing 阅读(338) 评论(0) 推荐(0)

UVa 620 - Cellular Structure
摘要:这道题重点在于理解题意,不是动态规划?(If an organism were in two stages of growth at the same time the first option from the list above should be given as an answer.):初始阶段微生物为A,有两种生长方式,一种是右边扩展“AB”,一种是最前面扩展“A”而最后面扩展“B”3;所以合法的微生物的长度都是奇数,然后再判断是否是以上三种阶段即可;参考了网上的分析。 1 # include <stdio.h> 2 # include <string.h> 阅读全文

posted @ 2012-04-13 14:01 getgoing 阅读(283) 评论(0) 推荐(0)

HDOJ 2553 N皇后问题
摘要:回溯,看了lrj的白书后写的;一提交,TLE。# include <stdio.h># define MAXN 15int n, ans;char vis[3][MAXN*2+1];void search(int cur);int main(){ while (~scanf("%d", &n)) { if (!n) break; ans = 0; memset(vis, 0, sizeof(vis)); search(0); printf("%d\n", ans)... 阅读全文

posted @ 2012-04-12 10:11 getgoing 阅读(265) 评论(0) 推荐(0)

TLE: HDOJ 1010 Tempter of the Bone
摘要:超时了,dfs写的是对的(通过了discuss中一块强大的数据)谁说TLE的代码没有用?# include <stdio.h># include <string.h>typedef struct{ int x, y;}Point;const Point d[4] = {{-1,0}, {0,1}, {0,-1}, {1,0}};int N, M, T, tot, ok;char m[8][8];int dfs(Point s, int dir);int can_move(Point s, int dir);void solve(Point s, Point e, int 阅读全文

posted @ 2012-04-11 11:59 getgoing 阅读(235) 评论(0) 推荐(0)

POJ 1182 并查集之食物链
摘要:准备有三种动物A,B,C,假设有A->B,B->C,那么有C->A。关系递推式:如果用R(x,y)表示x和y之间的关系,0表示同类,1表示x->y,2表示x<-y,那么有 R(x,z) = R(x,y) + R(y,z),如下表格 所以,对不不再一个集合中的两个元素x,y,R(x,y) = R(x,rx) + R(rx,ry) + R(ry,y)。练手POJ 1182 食物链1 TLE 原因是输入的时候是先输入d,我写成了scanf("%d%d%d", &x, &y, &d);优化:参考了杭杰的ppt,在每次查找时顺便更 阅读全文

posted @ 2012-04-10 12:09 getgoing 阅读(232) 评论(0) 推荐(0)

UVa 10167 - Birthday Cake
摘要:这道题是直接暴力,需要注意的是cherry不能在直线上,因此需要两个变量来分别统计在直线两边的个数;还想到一种方法:把所有斜率排序,然后二分枚举,复杂度为O(n+n*lgn+lgn)。 1 # include <stdio.h> 2 3 int c[105][2]; 4 5 int main() 6 { 7 int n, c1, c2, A, B, i, ans[2]; 8 9 while (1)10 {11 scanf("%d", &n);12 if (!n) break;13 14 for ( i = 1; i <= 2*n; ++i)15 s 阅读全文

posted @ 2012-04-07 20:27 getgoing 阅读(238) 评论(0) 推荐(0)

WA:ZOJ 1025 Wooden Sticks
摘要:思路是:先对长乘以重量进行排序,除去完全相同的(l,w分别相等),然后依次计算dp(i),最后统计f[i] == 1的个数。为什么这样考虑呢?看图:为什么这样不对呢?看图:这就说明了统计1的个数的想法是错误的。看了网上的代码,都说是贪心。谁说WA的代码就没用? 1 # include <stdio.h> 2 # include <memory.h> 3 # include <stdlib.h> 4 5 typedef struct { 6 int l, w; 7 }stick; 8 9 int T, n;10 int mask[5002];11 int f[ 阅读全文

posted @ 2012-04-07 11:23 getgoing 阅读(326) 评论(0) 推荐(0)

ZOJ 1093 Monkey and Banana
摘要:和The Tower of Babylon一模一样,这里给出两个代码:一个是直接做的,不说了;另一个是参考了Staginner大牛的方法,做了一个优化:将底面积按大到小排序,这样搜索时,只用从当前石块的下一个石块开始即可,最后打印 f[1] 即可,复杂度降低很明显的。/* 方法二实际上有个错误,具体见后述。*/方法一 1 # include <stdio.h> 2 # include <memory.h> 3 # include <stdlib.h> 4 5 typedef struct { 6 int x, y, h; 7 }block; 8 9 int 阅读全文

posted @ 2012-04-07 00:16 getgoing 阅读(207) 评论(0) 推荐(0)

csu 1141 节能
摘要:记忆化搜索,dp;前面WA的原因是状态转移时,对机器人位置的转移考虑补充分,使用vis[]标记只能保证相邻的状态的转移是正确的;需要增加一个额外的参数标记机器人所在位置,这样在递归时才能保证状态的转移是正确的(不会交叉);感谢LJ大牛!感谢C++!(使用C提交超时,原因不明,排除了OJ的原因,对数据预处理的C代码很快通过,百度"C++比C快"的结果都是C比C++快,无语)。 1 # include <cstdio> 2 # include <iostream> 3 # include <cstring> 4 5 using namespa 阅读全文

posted @ 2012-04-05 17:44 getgoing 阅读(269) 评论(0) 推荐(0)

WA: csu 1141节能
摘要:写着写着越来越觉得是dfs,dp写的不知道哪里出问题了。 1 # include <stdio.h> 2 # include <string.h> 3 4 # define INF 1<<30 5 # define MAXN 1002 6 7 # define MIN(x,y) ((x)<(y) ? (x):(y)) 8 9 int n, v;10 int p[MAXN];11 int d[MAXN];12 int vis[MAXN];13 long long int f[MAXN][MAXN]; /* 子问题f[i][j]:下一个关的是 i 或 j 阅读全文

posted @ 2012-04-05 11:16 getgoing 阅读(212) 评论(0) 推荐(0)

UVa 437 - The Tower of Babylon
摘要:和之前的 Stacking Boxes 很像,但是这里求的是最大高度,并且盒子成了立体状,因此对每个盒子有三种不同的高度,分别为x, y, z,相当于增加两个盒子;记忆化搜索。 1 # include <stdio.h> 2 # include <memory.h> 3 4 typedef struct { 5 int x; 6 int y; 7 int h; 8 }block; 9 10 int n;11 int f[91];12 block b[91];13 14 int cmp(const void *x, const void *y)15 {16 re... 阅读全文

posted @ 2012-04-04 14:59 getgoing 阅读(245) 评论(0) 推荐(0)

UVa 10285 - Longest Run on a Snowboard
摘要:这道题可以定义状态 f[i, j] 为从 (i, j) 出发所能滑的最大长度,则当前点只与四周点的最大长度有关,即得状态转移方程。 1 # include <stdio.h> 2 # include <memory.h> 3 4 # define MAX(x,y) ((x)>(y) ? (x):(y)) 5 6 int r, c; 7 char name[21]; 8 int f[101][101]; 9 int h[101][101];10 11 int dp(int i, int j);12 13 int main()14 {15 int T, i, j, m 阅读全文

posted @ 2012-04-04 12:12 getgoing 阅读(240) 评论(0) 推荐(0)

UVa 10465 - Homer Simpson
摘要:乍一看是道线性规划题,不由想去找数学解法;其实还是个完全背包,只不过只有两件物品,体积就是所耗时间,重量为1;需要注意题目的描述:For each test case, print in a single line the maximum number of burgers Homer can eat without having beer. If homer must have beer, then also print the time he gets for drinking, separated by a single space. It is preferable that Home 阅读全文

posted @ 2012-04-04 11:14 getgoing 阅读(374) 评论(0) 推荐(0)

UVa 531 - Compromise
摘要:LCS问题,不同的是要打印LCS;算法导论上的方法,f 可以使用滚动数组, 应该有更好的打印方法;要注意格式:PE了一次,就是因为最后一个单词后面不能留空格。 1 # include <stdio.h> 2 # include <string.h> 3 4 # define MAX(x, y) ((x)>(y) ? (x):(y)) 5 6 # define UPL 1 7 # define UP 2 8 # define LEFT 3 9 10 int len[2];11 char s1[101][31];12 char s2[101][31];13 int f 阅读全文

posted @ 2012-04-04 10:36 getgoing 阅读(230) 评论(0) 推荐(0)

UVa 10130 - SuperSale
摘要:0-1背包。今天UVa出问题了? 1 # include <stdio.h> 2 # include <memory.h> 3 4 # define MAX(x,y) ((x)>(y) ? (x):(y)) 5 6 int f[31]; 7 int mw[101]; 8 int p[1001]; 9 int w[1001];10 11 int main()12 {13 int k, i, v, T, maxV, N, G;14 15 scanf("%d", &T);16 while (T--)17 {18 scanf("%d& 阅读全文

posted @ 2012-04-04 09:48 getgoing 阅读(225) 评论(0) 推荐(0)

[背包九讲笔记] UVa 674 Coin Change
摘要:看了背包九讲,感觉写得很好,很清楚,很容易看懂(虽然有很多句子不通顺的地方)。这道题虽然看上去上不是背包,但和完全背包的考虑方法有很相似。完全背包的状态转移方程: f[i, v] = max(f[i-1,v], f[i][v-c[i]]+w[i]);使用一维数组,有: f[v] = max(f[v], f[v-c[i]+w[i]), v = c[i]...Vmax;这道题f[i,v]有类似的意义:使用前 i 种硬币恰好组成面值v的方法总数,这样f[i,v] 包含了只使用前 i-1 种硬币组成面值v的方法种数,另外也包含了使用前 i 种硬币组成面值 v-c[i] 的方法种数,所以状态转... 阅读全文

posted @ 2012-04-03 18:14 getgoing 阅读(1591) 评论(0) 推荐(0)

UVa 624 - CD
摘要:这道题没有说明背包的最大容量,估计值取1500min(>=24h)。这道题没有要求字典序,打印一种结果即可;对保存中间结果的方法有点依赖了(浪费空间)。 1 # include <stdio.h> 2 # include <memory.h> 3 4 int v[21]; 5 int f[21][1500]; 6 int p[21][1500]; 7 8 void print_list(int m, int c); 9 10 int main()11 {12 int c, m, i, j;13 14 while (~scanf("%d%d", 阅读全文

posted @ 2012-04-03 11:51 getgoing 阅读(555) 评论(0) 推荐(0)

UVa 348 - Optimal Array Multiplication Sequence
摘要:这道题是矩阵链,本来想照着书写的,L不在,于是自己想了想,试了试,没想到还真写出来了。。看来最难的不是题,而是如何克服畏惧的心(The only thing you have to fear, is fear itself.)。。记忆化搜索,打印那里想来想去不知道怎么把几种情况统一起来,也忘了书上怎么处理的。 1 /* 348 - Optimal Array Multiplication Sequence */ 2 # include <stdio.h> 3 # include <memory.h> 4 5 typedef struct { 6 int r; 7 int 阅读全文

posted @ 2012-04-03 11:11 getgoing 阅读(233) 评论(0) 推荐(0)

UVa 562 - Dividing coins
摘要:用half替代sum>>1后通过了,不明原因。 1 /* 562 - Dividing coins */ 2 # include <stdio.h> 3 # include <memory.h> 4 5 int v[105]; 6 int f[50050/2]; 7 8 int main() 9 {10 int n, m, i, sum, j, half;11 12 scanf("%d", &n);13 while (n--)14 {15 scanf("%d", &m);16 for (sum = 0, 阅读全文

posted @ 2012-04-03 09:53 getgoing 阅读(227) 评论(0) 推荐(0)

c++比c快?一道字符串题目
摘要:题目是这样的:求通过添加字将一个字符串变为回文字符串所需最少的添加次数。解法:求出该字符串与反串的最大公共子序列的长度k,那么字符串的长度n减去k就是所求值。为了不超出内存限制,使用了类似滚动数组的方法。问题在这里,C程序和改写后的C++程序(只改写了头文件,添加了一句using namespace std;),而被判运行时差足有3s,有图为证:可能与测试数据和OJ的评判系统有关,但我想肯定也和这两种语言某种方面的差异有关,在此请教路过的同学,谢谢!附:原题链接:1097 PalindromeC代码 1 # include <stdio.h> 2 # include <str 阅读全文

posted @ 2012-04-02 22:22 getgoing 阅读(578) 评论(0) 推荐(0)

UVa 357 - Let Me Count The Ways
摘要:又是硬币型的。。虽然通过了,还有几个疑问:1. 题目中说 The input will consist of a set of numbers between 0 and 30000 inclusive, one per line in the input file. , 难道不包括30000吗? 输入30000时AC的程序结果是负值(将long long int 改为unsigned long long int可以解决)。2. 使用dev c++输出时出现错误: There are 6 ways to produce 0 cents change. There are 4 ways t... 阅读全文

posted @ 2012-04-02 13:18 getgoing 阅读(367) 评论(0) 推荐(0)

UVa 147 - Dollars
摘要:无数次WA换来一次AC,只因没有使用long long int。。。 1 # include <stdio.h> 2 # include <math.h> 3 4 const int coin[] = {0,5,10,20,50,100,200,500,1000,2000,5000,10000}; 5 6 long long int f[6010][12]; 7 8 long long int dp(int m, int i); 9 10 int main()11 {12 double c;13 14 while (1)15 {16 sca... 阅读全文

posted @ 2012-04-02 11:47 getgoing 阅读(304) 评论(0) 推荐(0)

UVa 10192 - Vacation
摘要:又是lcs,所幸 7min AC了。 1 # include <stdio.h> 2 # include <string.h> 3 4 int len; 5 int x[2]; 6 char s1[105]; 7 char s2[105]; 8 int ans[105*105]; 9 10 int lcs(int *x);11 12 int main()13 {14 int cnt;15 16 cnt = 0;17 while (NULL != gets(s1))18 {19 if (s1[0] == '#') break;20... 阅读全文

posted @ 2012-04-02 10:22 getgoing 阅读(391) 评论(0) 推荐(0)

UVa 10066 - The Twin Towers
摘要:一看就知道是lcs,10分钟敲好了代码,通过示例,一提交MLE,明白了没有保存中间结果;再次提交,打开邮箱,一直F5,等了很长时间没反应,难道又MLE了?结果回到题目页面,发现了下面这句话:You have to select a programming language.。。。再次提交WA:没有把ans[]初始化为-1;最终花了25分钟才AC了,教训啊! 1 # include <stdio.h> 2 # include <memory.h> 3 4 int N1, N2; 5 int x[2]; 6 int s1[101]; 7 int s2[101]; 8 int 阅读全文

posted @ 2012-04-02 10:06 getgoing 阅读(564) 评论(0) 推荐(0)

UVa 10131 - Is Bigger Smarter?
摘要:DAG最大路径;AC后我搜了搜,有几个是理解为最大下降子列(我开始也这么想的),但是作为dp的练习题,就化为DAG了,复杂度当然高了,但是没超时。 1 # include <stdio.h> 2 3 int n; 4 int w[1000]; 5 int s[1000]; 6 int d[1000]; 7 int g[1000][1000]; 8 9 int dp(int i);10 void print_list(int i);11 12 int main()13 {14 int i, j, maxl, k;15 16 n = 1;17 while (~s... 阅读全文

posted @ 2012-04-02 09:30 getgoing 阅读(398) 评论(0) 推荐(0)

UVa 116 - Unidirectional TSP
摘要:简单的动态规划(递推),要能够打印最小权值对应的最小字典序路径;MIN 定义中‘<’写成了‘>’导致一次WA。。另外求最小权值对应的最小下标那里写的很乱。# include <stdio.h># define MIN(X,Y) ((X)<(Y) ? (X):(Y))int f[12][105];int p[12][105];int col, row;int main(){ int i, j, ans, t, x; while (~scanf("%d%d", &row, &col)) { for (i = 0; i < ro 阅读全文

posted @ 2012-04-02 00:50 getgoing 阅读(1321) 评论(0) 推荐(0)

UVa 10003 - Cutting Sticks
摘要:记忆化搜索;需要判断当前状态是否被更新。# include <stdio.h># include <string.h># define INF 20000int l, n;int s[54];int f[55][55];int dp(int i, int j);int main(){ int i, j; while (1) { scanf("%d", &l); if (l == 0) break; scanf("%d", &n); if (l == 0) break; for (i = 1;... 阅读全文

posted @ 2012-04-01 23:38 getgoing 阅读(267) 评论(0) 推荐(0)

csuoj 1215 稳定排序
摘要:经过一位大牛的指点,放弃了使用分治的念头,看来快排还是很灵活的。 1 # include <stdio.h> 2 # include <stdlib.h> 3 4 # define MAXN 100005 5 6 typedef struct { 7 int X, Y; 8 int I; 9 }data;10 11 data a[MAXN];12 13 int cmp(const void *a, const void *b)14 {15 if ((*(data*)a).X == (*(data*)b).X)16 return (*(data*)a)... 阅读全文

posted @ 2012-04-01 16:30 getgoing 阅读(303) 评论(0) 推荐(0)

导航