摘要:
题意:给定一些区间和每个区间内的元素数量(选一些互不相同的整数作为区间内的元素,每个整数只至多选1次),问最少有多少个元素(所有元素不能重复)。分析:这题是用spfa做差分约束。不能向bellman一样。还是把差分约束理解为求最长路比较直观。对于dist[a]-dist[b]>=c,我们可以看作dist[a]>=dist[b]+c,所以我们如果初始化为负无穷,起点初始化为0,并让所有的不等式都满足,那么就是在求一个最长路。首先用数组sum[i]表示小于等于i的元素有多少个。这样区间[a+1,b]的元素个数要求c,可以表示为sum[b]-sum[a]>=c。还要注意每个元素要么 阅读全文
posted @ 2011-06-23 16:08
undefined2024
阅读(789)
评论(0)
推荐(0)
摘要:
题意:给出一个字符串和字符串中出现字符的种数,求该串有多少个长度为n的互不相同的子串。分析:karp-rabin把字符串转化成数字的算法,一个字符串有n种字符构成,把每种字符对应为0~n-1中的一个数字,把字母换成对应的数字之后,对于固定长度的串,每个串都与一个唯一的n进制数对应。这样就可以hash了View Code #include #include #include #include usingnamespace std;#define maxn 16000005bool hash[maxn];int name[260];int n, nc;char st[maxn];int main( 阅读全文
posted @ 2011-06-23 14:22
undefined2024
阅读(972)
评论(0)
推荐(0)
摘要:
题意:给出一个数列S,对其中的一些段进行限制(规定了一段内所有数字加和的上界或下界),求是否存在这样的数列S满足所有限制。分析:差分约束系统,对于一组类似于xa-xb>=c的不等式求是否有满足的解,用bellman来解,bellman是使得dist[v] =C即 B#include #include #include usingnamespace std;#define maxn 105#define inf 0x3f3f3f3fint n, m, pre[maxn], edge[maxn][3];int dist[maxn];int relax(int u, int v, int c) 阅读全文
posted @ 2011-06-23 13:38
undefined2024
阅读(345)
评论(0)
推荐(0)