摘要: 题意: 有 M 个猪圈,每个猪圈里初始时有若干头猪。一开始所有猪圈都是关闭的。依次来了 N 个顾客,每个顾客分别会打开指定的几个猪圈,从中买若干头猪。每个顾客分别都有他能够买的数量的上限。每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开着的猪圈里,然后所有猪圈重新关上。分析: 此题是... 阅读全文
posted @ 2011-08-27 18:51 undefined2024 阅读(2022) 评论(0) 推荐(1)
摘要: 最大流View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define N 505#define E 1005#define inf 0x3f3f3f3f#define maxl 35struct edge{ int x, y, nxt; int c;} bf[E];int ne, head[N], cur[N], ps[N], dep[N];char name1[N][maxl], name2 阅读全文
posted @ 2011-08-27 16:48 undefined2024 阅读(241) 评论(0) 推荐(0)
摘要: 题意:给定n、m,求1~n的一个排列,逆序数对数为m,且该排列的字典序最小。分析:若逆序数对数为m,则每个数右侧比其大的数的个数之和应为k=n*(n-1) - m(正序数对数)。我们可以想象,如果把k拆分成若干个数字的和,并把这些数字随意分配给n个位置,来代表该位置右侧比该位置上的数字大的数的个数,那么这定能构成一个逆序数对数为m的排列。若想要字典序最小那么就要尽量把小的数往前放。小的数也就是其右侧比其大的数较多的数。如果用拆分k的方法,则应该给第一个位置分配最大的数,然后给第二个位置分配最大的数……然而每个位置分配的数是有限制的,因为对于位置i其右侧有n-i个数,也就是最多只能有n-i个数比 阅读全文
posted @ 2011-08-27 12:59 undefined2024 阅读(414) 评论(0) 推荐(0)
摘要: 简单题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>using namespace std;#define maxn 105#define maxm 300int n, x, d;char s[maxn], p[maxn], c[maxn], m[maxn];int spos[maxm];void input(){ scanf("%s%s%s", s, p, c);} 阅读全文
posted @ 2011-08-27 10:51 undefined2024 阅读(178) 评论(0) 推荐(0)