2012年3月31日

UVa 674 - coin change

摘要: 之前做过一道HDOJ上很类似的一道题,当时用的是枚举(依次从大到小枚举某一面值使用的次数,然后把所有情况相加),今天在UVa动态规划里看到这道题,一下子就没思路了,后来翻到了Rookie_Yang的代码,实在不理解。。硬着头皮求助队友,最后找到了正确的状态转移方程,才理解他的代码是优化过的;dp(i, j)表示 i 分钱用前 j(0,1,2,3,4) 种类型的硬币兑换总的方法;2012.4.2 以下注释中的考虑没必要,因为dp()中已经对j == 0的情况处理了。/* 记忆画搜索时还需要注意:对于 s[0..4][0],要在搜索前初始化(因为最终追溯到的是 s[0..4][0] 这 5 个数) 阅读全文

posted @ 2012-03-31 20:39 getgoing 阅读(620) 评论(2) 推荐(0) 编辑

UVa10405 - Longest Common Subsequence

摘要: 最大公共子序列,需要注意的是x[]最开始保存的是相应字符串的长度,在比较时应比较s1[x[1]-1]与s2[x[2]-1];水题,做一道过一道。。。 1 /* 10405 - Longest Common Subsequence */ 2 # include <stdio.h> 3 # include <string.h> 4 5 # define MAXN 1001 6 7 int lena; 8 int x[2]; 9 char s1[MAXN];10 char s2[MAXN];11 int ans[MAXN*MAXN];12 13 int get(int *x) 阅读全文

posted @ 2012-03-31 14:50 getgoing 阅读(284) 评论(0) 推荐(0) 编辑

UVa 103 - Stacking Boxes

摘要: DAG上的动态规划,需要注意最后要打印起点到终点的一条路,因此状态d[i]定义为从 i 出发的最长路的距离。UVa今天这是怎么了,两道题都是将近5min才出结果。 1 # include <stdio.h> 2 # include <string.h> 3 # include <stdlib.h> 4 5 # define MAXD 11 6 # define MAXN 31 7 8 int k, n; 9 int d[MAXN];10 int box[MAXN][MAXD];11 int g[MAXN][MAXN];12 13 int cmp(const 阅读全文

posted @ 2012-03-31 14:13 getgoing 阅读(230) 评论(0) 推荐(0) 编辑

UVa 111 - History Grading

摘要: 最大公共子序列;要读懂题目中对于输入的描述;仍然是上次的GDKOI最大公共子串的写法。 1 # include <stdio.h> 2 3 int n; 4 int x[2]; 5 int cor[21]; 6 int cur[21]; 7 int ans[441]; 8 9 int get(int *x);10 11 int main()12 {13 int i, t;14 15 scanf("%d", &n);16 for (i = 1; i <= n; ++i) 17 {18 scanf("%d", &t);19 阅读全文

posted @ 2012-03-31 13:02 getgoing 阅读(471) 评论(0) 推荐(0) 编辑

导航