摘要: 我不写结题报告吧,贴别人的,还是抱怨一下,题目没说清楚,说"且第i种箱子不能放在高度超过A_i的地方。"是箱顶不能超过而不是箱底不能超过,怪不得我的那个不能AC:先按照A_i 排序,最好用快速排序然后再按01背包枚举关键代码:===========================================qsort(1,n);f[0]:=true;for i:=1 to n do for j:=1 to c[i] do for k:=a[i] downto h[i] do if f[k-h[i]] then f[k]:=true;============================. 阅读全文
posted @ 2011-07-15 18:27 zqynux 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 刚开始还以为和那个硬币游戏一样,要用那种DP,然后我想破脑袋想不出来,后来看了题解才知道就是区间动态规划,那就简单了,方程我不写了,我的还有条件,麻烦得很,看代码里面吧。 对比了一下硬币游戏和这题,小感悟:如果是两人或多人的博弈游戏,那状态里就要有上回对方是怎么取舍的;但是如果只是自己去,那就是区间动态规划。 代码:#include <stdio.h>#include <stdlib.h>#define max(a, b) ((a)>(b)?(a):(b))int num[100];int f[101][101];//f[i][j] 表示从i到j最大取得数int 阅读全文
posted @ 2011-07-15 16:58 zqynux 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 刚把这题昨晚,顺便就用最大匹配把这题做了,不给思路了,直接上代码:#include <stdio.h>#include <string.h>#include <stdlib.h>int num[20];int f[20];int ans = 1;int from[20], used[20];int map[20][20];int n;int find(int k){ int i; for(i = 0; i < n; i++){ if(map[k][i] && !used[i]){ used[i] = 1; if(from[i] == - 阅读全文
posted @ 2011-07-15 15:28 zqynux 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 这题第一问就是最长上升序列,不解释。 第二问说一下,首先,如果i可以打到j,那就把i,j之间加一条边,然后搜最大匹配。最大匹配出来的结果是边数的结果,然后用节点数减去变数就是有多少条链(画图看),感觉好像生物里的氨基酸——多肽。 代码:#include <stdio.h>#include <string.h>#include <stdlib.h>#define max(a, b) ((a)>(b)?(a):(b))struct num{ int x, y, z;}num[1000];int f[1000];int ans, n;int map[1000 阅读全文
posted @ 2011-07-15 15:10 zqynux 阅读(230) 评论(0) 推荐(0) 编辑