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) 编辑

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

导航