摘要: 经典DP。设dp[i][j]为前i分钟移动j次所得的最大苹果数,本来打算再设一状态表示当前在哪棵树,但发现移动的次数就能确定了。dp[i][j]=max(dp[i-1][k-1]+catc(k%2,app[i]),dp[i-1][k]+catc(k%2,app[i])); 1 #include ... 阅读全文
posted @ 2014-06-22 11:48 chenjunjie1994 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 选课[问题描述]在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习。现在有N门功课,每门课有个学分,每门课有一门或没有直接先修课(若课程a是课程b的先修课即只有学完了课程a,才能学习课程b)。一个学生要从... 阅读全文
posted @ 2014-06-22 11:05 chenjunjie1994 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 因为苹果可能在不同的子树中,所以,很容易想到设状态dp_back[i][j]为以i点为树根走j步并回到i点的最大苹果数与dp_to[i][j]不回到i点的两个状态。于是,转移方程就很明显了。只是注意要减去一来一回,或者不回的边。树形DP里套背包。但这题远比这复杂,个人认为。因为在实现上细节太多。实现... 阅读全文
posted @ 2014-06-21 23:39 chenjunjie1994 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 很久以前做的树形DP题,今天再遇到时,竟然不会了,所以写写。。设数组:prf[MAX][MAX],cost[MAX],sum[MAX]。分别表示,在第i个结点为根的子树内的情况下,若有j个用户申请看电视,所能得到的最大费用。cost表示传送到i点时所花的费用,而sum表示当前结点为根的子树内已访问的... 阅读全文
posted @ 2014-06-19 23:09 chenjunjie1994 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 母函数简单题 1 #include 2 #include 3 using namespace std; 4 5 const int MAX=130000; 6 int c1[MAX],c2[MAX]; 7 8 struct { 9 int val,num;10 }thing[55];... 阅读全文
posted @ 2014-06-19 15:54 chenjunjie1994 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 经典DP,这样的递推确实有点难。 把所有直线分成两组,可以知道m条直线的交点方案数=(m-r)条平行线与r条直线交叉的交点数+ r条直线本身的交点方案亦就是 =(m-r)*r+r条之间本身的交点方案数(0 2 #include 3 using namespace std; 4 5 bool an... 阅读全文
posted @ 2014-06-19 11:16 chenjunjie1994 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 using namespace std; 4 5 const int MAX=105; 6 7 bool vis[MAX][MAX]; 8 char maze[MAX][MAX]; 9 int n,m;10 int dir[8][2]={0,... 阅读全文
posted @ 2014-06-18 23:28 chenjunjie1994 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 using namespace std; 4 5 const int MAX=13; 6 7 char maze[MAX][MAX][MAX]; 8 9 struct {10 int i,j,k;11 }beg,des,que[11... 阅读全文
posted @ 2014-06-18 23:27 chenjunjie1994 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 简单题 1 #include 2 #include 3 #include 4 using namespace std; 5 6 const int MAX=205; 7 const int inf=1000000; 8 int tim[MAX][MAX]; 9 char maze[MAX][... 阅读全文
posted @ 2014-06-18 23:26 chenjunjie1994 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 经典搜索 1 #include 2 #include 3 using namespace std; 4 5 const int MAX=10; 6 7 int step[MAX][MAX]; 8 char maze[MAX][MAX]; 9 int n,m,t;10 struct {11 ... 阅读全文
posted @ 2014-06-18 21:54 chenjunjie1994 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 首先,p,q>=2,所以p,q=10000时,p 2 #include 3 4 using namespace std; 5 6 bool num[10005]; 7 int m,a,b; 8 int pnum[10000]; int n; 9 void type_table(){10 ... 阅读全文
posted @ 2014-06-18 21:08 chenjunjie1994 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 好吧,这题直接搜索就可以了,不过要按照长度最短的来搜,很容易想得到。记得ACM比赛上有这道题,呃。。不过,直接搜。。呵呵了,真不敢想。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 char s... 阅读全文
posted @ 2014-06-18 20:10 chenjunjie1994 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 这题有点类似LIS,由于颜色最多100种,所以只需建立一个100的数组,按对立面的关系以某种颜色为向上面的最大值就可以了。 1 #include 2 #include 3 #include 4 using namespace std; 5 6 int cube[505][7]; 7 int ... 阅读全文
posted @ 2014-06-18 16:32 chenjunjie1994 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 自己之前的不见了。。这题是双向广搜即可过。。 1 // Colour Hash (色彩缤纷游戏) 2 // PC/UVa IDs: 110807/704, Popularity: B, Success rate: average Level: 3 3 // Verdict: Accepted ... 阅读全文
posted @ 2014-06-18 14:19 chenjunjie1994 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 黑书上说用二分图的知识来解,但我想不出来,只好找规律发现,一条柱时为1,两条柱时为4。三条柱时为8。。这些1,3,7,11的数字加1后,都是下一条柱的最底部的数字,而且一条柱的数字之和总是按照这样的规律。1^2,2^2,3^2,4^2......所以。。 1 #include 2 #include... 阅读全文
posted @ 2014-06-18 10:41 chenjunjie1994 阅读(260) 评论(0) 推荐(0) 编辑