摘要:
由于上司的关系构成了一颗树,于是我们可以从树形dp的角度去考虑问题。不妨用f[cur][0]表示不选当前节点时这棵子树value的最大值,f[cur][1]表示选当前节点时这棵子树value的最大值,那么如果不选当前节点,它的子节点就可选也可不选,因此f[cur][0]要加上所有子节点x的Max{f[x][1],f[x][0]},而如果选当前节点,它的子节点必然不能选,因此f[cur][1]要加上所有子节点x的f[x][0]以及当前节点本身的value。#include<stdio.h>#include<string.h>#define MAXD 6010int N, 阅读全文
摘要:
这个题目可以用有限自动机的理论去做,也可以在设定好各个状态后枚举可能的情况并跳转状态,比如句子已经结束这个状态设为0,处于单词中这个状态设为1,在句子中间非单词部分时这个状态设为2,这样如果处于状态0但是遇到了小写字母就算是一个错误,处于状态1但遇到了大写字母也算是一个错误。#include<stdio.h>#include<string.h>#include<ctype.h>#define MAXD 100010int N, cnt;char b[MAXD];char isend(char ch){ return ch == '.' || 阅读全文
摘要:
为了查找标号最小的可用的block可以用一个以block标号为关键字的最小堆实现,同时为了能够修改正在使用的block延续的时间以及适时free过时的block,可以另外开一个以block开始使用的时刻为关键字的最小堆。#include<stdio.h>#include<string.h>#define MAXD 30010#define INF 0x3f3f3f3fconst int N = 30000, T = 600;int now, M, u[4 * MAXD], t[4 * MAXD], last[2 * MAXD];char b[5];void build( 阅读全文