上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 17 下一页

2012年4月14日

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 阅读(367) 评论(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 阅读(207) 评论(0) 推荐(0) 编辑

2012年4月13日

coj 1224 ACM小组的古怪象棋

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

posted @ 2012-04-13 18:00 getgoing 阅读(463) 评论(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 阅读(324) 评论(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 阅读(265) 评论(0) 推荐(0) 编辑

2012年4月12日

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 阅读(254) 评论(0) 推荐(0) 编辑

2012年4月11日

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 阅读(215) 评论(0) 推荐(0) 编辑

2012年4月10日

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 阅读(222) 评论(0) 推荐(0) 编辑

2012年4月7日

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 阅读(221) 评论(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 阅读(312) 评论(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 阅读(195) 评论(0) 推荐(0) 编辑

2012年4月5日

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 阅读(259) 评论(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 阅读(195) 评论(0) 推荐(0) 编辑

2012年4月4日

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 阅读(234) 评论(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 阅读(228) 评论(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 阅读(365) 评论(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 阅读(211) 评论(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 阅读(217) 评论(0) 推荐(0) 编辑

2012年4月3日

[背包九讲笔记] 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 阅读(1572) 评论(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 阅读(540) 评论(0) 推荐(0) 编辑

上一页 1 ··· 6 7 8 9 10 11 12 13 14 ··· 17 下一页

导航