摘要: 题目链接中规中矩的二维DP,披着背包的外衣,但感觉和背包没有毛线关系吧。状态转移 p[i][j] = max(p[i-1][j-k]+o[i][k]) k:0 to j i代表课程j代表时间. 1 #include <stdio.h> 2 #include <string.h> 3 int p[101][101],o[101][101]; 4 int main() 5 { 6 int i,j,k,n,m,max; 7 while(scanf("%d%d",&n,&m)!=EOF) 8 { 9 if(!n&&!m) br 阅读全文
posted @ 2012-07-27 20:28 Naix_x 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 题目链接第一个树形DP,这个题,以前用普通方法搞,WA了,然后知道是树形DP后,以为类似是数塔只不过是在树上而已,原来理解错了。。。参考了很多的解题报告,看了很多关于树形DP的文档。。终于,完成了,感觉非常类似滑雪的记忆化搜索。状态转移分情况讨论一下,有和一个叉连接,和两个叉连接。节点数总是m+1的。 1 #include <stdio.h> 2 #include <string.h> 3 struct tree 4 { 5 int l,r; 6 }p[101]; 7 int o[101][101],key[101],n,m; 8 int map[101][101]; 阅读全文
posted @ 2012-07-27 16:03 Naix_x 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 题目链接说着这个题难吧,代码真的是非常裸,说简单吧,自己想了好几天,都没想出如何用树状数组。以前见过用hash的方式映射的,为什么就没想到呢。。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #define N 500001 5 int p[N],n; 6 struct node 7 { 8 __int64 x; 9 int id;10 }num[N];11 int cmp(const void *a,const void *b)12 {13 return (*(str 阅读全文
posted @ 2012-07-27 13:43 Naix_x 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题目链接以前对快排不熟,不会搞结构体快排,今天正巧比赛里有这个题。。。秒杀了。。还是研究树形DP吧。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 struct node 5 { 6 int x; 7 int y; 8 int id; 9 }p[150001];10 int cmp(const void *a,const void *b)11 {12 struct node *c = (struct node *)a;13 struct node *d = (str.. 阅读全文
posted @ 2012-07-27 08:52 Naix_x 阅读(316) 评论(0) 推荐(0) 编辑