随笔分类 -  动态规划

上一页 1 2

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

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 阅读(630) 评论(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 阅读(298) 评论(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 阅读(242) 评论(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 阅读(480) 评论(0) 推荐(0)

GDKOI2003 最大公共子串
摘要:AOJ链接:最大公共子串这道题求多个字符串的最大公共序列(非连续)的长度,题目中说明了所有串的乘积不超过30000;题解将状态记录在一个长度为30000的数组中,使用类似编码的方式(我的理解)进行存取;和算法导论上对LCS的解法不大一样(递归而不是递推,计算量会少一些),仍然是动态规划的思想;0MS,学习了。下面的代码是看懂了书上的后,自己写的;起先觉得第47、48行的恢复多余,后来发现并不是:包含回溯的过程,需要恢复原来的下标。 1 # include <stdio.h> 2 # include <string.h> 3 4 char str[102][102]; 5 阅读全文

posted @ 2012-03-28 22:47 getgoing 阅读(420) 评论(0) 推荐(0)

poj 1163 The Triangle
摘要:简单的动态规划,重点是怎样才算是好的实现。 1 # include <stdio.h> 2 3 # define MAXN 100 4 5 short int a[MAXN][MAXN]; 6 7 int main() 8 { 9 int n, i, j;10 11 scanf("%d", &n);12 13 for (i = 0; i < n; ++i)14 for (j = 0; j <= i; ++j)15 scanf("%d", &a[i][j]);16 17 for (i = n... 阅读全文

posted @ 2012-03-25 15:15 getgoing 阅读(203) 评论(0) 推荐(0)

上一页 1 2

导航