UVA 10405 - Longest Common Subsequence
摘要:本题是求最长公共子序列,题目也给了提示,是求最长公共子序列最基本的题。注意字符串的读取要用gets()而不用scanf()因为字符串里可能有空格。代码如下:#include<stdio.h>#include<string.h>#define MAXN 1000 + 10char a[MAXN], b[MAXN];int f[MAXN][MAXN];void dp(){ int len1 = strlen(a+1); int len2 = strlen(b+1); int max = -1; for(int i = 1; i <= len1; i ++) f...
阅读全文
posted @
2012-03-08 14:00
BFP
阅读(227)
推荐(0)
UVA 103-Stacking Boxes
摘要:这道多维图形嵌套问题又做了好久,但也收获了很多,代码写的不是很清晰,通过这道题熟悉了qsort()快速排序,学会了通过qsort()间接对数组地址进行排序,也了解了有关间接排序的一些方法。(日记里)。代码如下:#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXN 30+5int a[MAXN][15],f[MAXN],m[MAXN][MAXN],r[MAXN],w[MAXN];int k, n, ok;int flag;int cmp1(const void *_p,const v
阅读全文
posted @
2012-03-08 12:47
BFP
阅读(195)
推荐(0)
UVA 111 - History Grading
摘要:这道dp题主要理解好题意:题中给的是按事项顺序的时间排列,而你要求的最长公共子序列是按时间顺序的事项排列,所以给你的排列要转化一下:例如:103 1 2 4 9 5 10 6 8 7//意思是:1事项在第三个时间位置发生,2事项在第一个时间发生以此类推:转化为:2 3 1 4 6 8 10 9 5 71 2 3 4 5 6 7 8 9 104 7 2 3 10 6 9 1 5 83 1 2 4 9 5 10 6 8 72 10 1 3 8 4 9 5 7 6代码如下:#include<stdio.h>#include<string.h>#define MAXN 20+5
阅读全文
posted @
2012-03-06 16:06
BFP
阅读(830)
推荐(1)
UVA 10066 - The Twin Towers
摘要:本题是双塔问题,主要考察了最长公共子序列的知识,是我做动规的第一题,动规题重在思路,而考虑的重点就是状态转移方程,本题所代表的一类题主要考虑的状态方程如下:什么时候:f[i][j] = f[i-1][j-1] +1;什么时候:f[i][j] = f[i-1][j];什么时候:f[i][j] = f[i][j-1];考虑好了这个,题目也就解出来了。。。。代码如下:#include<stdio.h>#include<string.h>#define MAXN 100 + 10int a[MAXN], b[MAXN], f[MAXN][MAXN];int N1, N2, ma
阅读全文
posted @
2012-03-02 15:21
BFP
阅读(346)
推荐(0)
UVA 10494 - If We Were a Child Again
摘要:什么也不说了,哗哗的。。。。(数据尽量考虑全面):代码如下:#include<stdio.h>#include<string.h>#define MAXN 200000char a[MAXN], f[2];long long s[MAXN];long long x, y;void solve(){ memset(s,0,sizeof(s)); int len = strlen(a); int p = -1; y = 0; for(int i = 0; i < len; i ++) { y = y *10 + (a[i] - '0');//pri..
阅读全文
posted @
2012-03-01 00:21
BFP
阅读(218)
推荐(0)
UVA 748 - Exponentiation
摘要:取幂运算:本题考查了浮点数高精度取幂运算,题目很简单,我的思路是浮点数作积运算小数点的位数很重要,而积的小数点的位数等于因子的小数点的位数之和,知道这一点就确定了小数点的位置了,之后再进行前后去零处理(题目要求),即可。代码如下(有待优化):#include<stdio.h>#include<string.h>#define MAXN 20000char a[7];int n, num;int A_1[MAXN], A[6], s[MAXN];void solve(){ int p = 5; memset(A_1,0,sizeof(A_1)); for(int i =
阅读全文
posted @
2012-02-29 21:30
BFP
阅读(541)
推荐(0)
UVA 465 - Overflow
摘要:本题主要是作了个高精度加法,乘法运算。代码还够长,题中我忽略了sscanf()得用法,要注意一些。还有就是复杂度的计算在这里显得重要了些,还得在这方面加把劲。代码如下(C/C++):#include<stdio.h>#include<string.h>#define MAXN 20000char a[MAXN], b[MAXN],s[MAXN],y[2];int A[MAXN], B[MAXN], S[MAXN];void decide(){long long a1, b1, s1; sscanf(a,"%lld",&a1);sscanf(b
阅读全文
posted @
2012-02-28 13:02
BFP
阅读(687)
推荐(0)
UVA10361 - Automatic Poetry
摘要:没想到这样一个水题也把我憋了这么久,唉,方法很简单把因‘<’'>'号分开的几部分字符串分别放在不同的数组里,输出时,第一行忽略<>号输出,第二行先输出...前面的,后面的变换一下第一行的字符串顺序输出就可以了。困住我的地方:测试组数的输入问题,评测之后出现runtime error。while(gets(num) != NULL) { sscanf(num,"%d",&n);开始时我定义了char n;用while(gets(&n) != NULL);之后问了斌哥,知道了这样只能读一个字符,也就是测试组数只能是个位数。
阅读全文
posted @
2012-01-11 14:25
BFP
阅读(428)
推荐(0)
UVA 10106 - Product
摘要:将数学运算过程程序化,注意地址的变动,缩位进位就可以啦!#include<stdio.h>#include<string.h>#define MAXN1 250 + 10#define MAXN2 500 + 10char s1[MAXN1], s2[MAXN1];int num[MAXN2],num1[MAXN1],num2[MAXN1];void solve(){ int len1 = strlen(s1); for(int i = 0; i < len1; i ++) num1[i] = s1[len1-i-1] - '0'; int len
阅读全文
posted @
2011-12-19 23:55
BFP
阅读(329)
推荐(0)
UVA 401 - Palindromes
摘要:这道题憋了好久,题很简单,错在了输出格式:每行之间有空格 judge后wrong answer,值得注意。#include<stdio.h>#include<string.h>char s[25];int palin(char* s){ int len = strlen(s); for(int i = 0; i < len/2; i ++) if(s[i] != s[len-1-i])return 0; return 1;}int mirr(char* s){ char s1[40]="ABCDEHIJKLMNOPQRSTUVWXYZ1234567...
阅读全文
posted @
2011-12-19 22:54
BFP
阅读(570)
推荐(1)
UVA 424 - Integer Inquiry
摘要:很水的题。。。思路:这么长的数,首先要把他看成是字符串,存在一个字符数组里。(可不可以把它看成紧挨着的N数呢,每次读一个数直接进行加运算,最后的零没法处理,还没想到),让后把字符转换成数字存在整数数组里面,在里面进行运算。#include<string.h>//#include<stdlib.h>#include<stdio.h>#define MAXN 100 + 10char s[MAXN];int num[MAXN];void solve(){ int len = strlen(s); for(int i = 0; i < len; i ++)
阅读全文
posted @
2011-12-19 22:53
BFP
阅读(646)
推荐(0)