由于题目太水。。
一道题都没有打。。
Mobile Service (CodeVS 1383)
service,3 sec,64mb
一个公司有三个移动服务员。如果某个地方有一个请求,某个员工必须赶到那个地方去(那个地方没有其他员工)某一时刻只有一个员工能移动。被请求后,他才能移动,不允许在同样的位置出现两个员工。从p到q移动一个员工,需要花费c(p,q)。这个函数没有必要对称,但是c(p,p)=0。公司必须满足所有的请求。目标是最小化公司花费。
输入
第一行有两个整数L,N(3<=L<=200, 1<=N<=1000)。L是位置数 ;N是请求数。每个位置从1到L编号。下L行每行包含L个非负整数。第i+1行的第j个数表示c(i,j) 并且它小于2000。最后一行包含N个数,是请求列表。一开始三个服务员分别在位置1,2,3。
输出
第一行包含一个数M表示最小服务花费。第二行包含N个数,第i个数表示哪个员工执行服务任务(1,2或3)。如果有多种可能,输出任意一种。
样例输入
5 9
0 1 1 1 1
1 0 2 3 2
1 1 0 4 1
2 1 5 0 1
4 2 3 4 0
4 2 4 1 5 4 3 2 1
样例输出
5
1 2 1 2 2 1 3 1 3
Solution
显然是DP
注意到相当多的不合法状态,考虑改变状态表示
令 dp[k,a,b] 表示处理到第k个请求,另外两个服务员的位置为a和b
复杂度 O(NL2) 3s可过。
注意处理题目红色高亮部分
代码的话
http://www.codevs.cn/wiki/solution/?problem_id=1383
这里有
Ticket Office
Ticket,0.5sec,64mb
卖票公司以卖连票取代一张一张卖单票。公司收到了大数量的订单,订单以连续的座椅中最小编号的椅子的编号来表示。公司不能完成所有的订单任务,但是如果准确地完成这些订单 会有很多椅子空着 如果公司接受一个订单,且椅子能被按订单要求的安排,下订单者要付全价(2元)。如果公司接受一个订单,但是安排的位置不同于被请求的位子,那么只要付半价(1元)。安排一个方案最大化总收入。
输入
第一行有整数M, L(1<=M<=30000,1<=L<=100)。M是座位数,L是连续座位的座位数。座位从1到M编号。第二行包含一个整数N (1<=N<=100000)是订单数量。第三行包含N个整数,第i个数z表示订购z到z+L-1的座位。
输出
第一行一个整数S 表示最大收入。第二行包含一个整数Q 表示被接受的订单数量。下面Q行每行有两个数x, y。表示订单x订到了从y开始的L个座位。以订单的y的增序来输出。如果有多种可能,输出任意一种。
样例输入
20 3
7
4 2 10 9 16 15 17
样例输出
9
6
4 1
1 4
2 7
3 10
6 13
5 16
Solution
令
dp[i]=(a,b)
表示处理到第i个位置时,2元和1元的票数。而且显然尽可能地多选2元是最优的。
因此有
布吉的游戏
Game(.cpp/c/pas)
【题目描述】
布吉有一个棋盘,被分成了n*m个格子,每个格子上有一个蜘蛛。布吉一声令下,所有蜘蛛可以往相邻4个格子移动一步,或者停留在原地。布吉想知道,命令下达后最多有多少个格子是空的。
【输入描述】
多组数据,以EOF结束
每行2个数n,m
【输出描述】
每个数据输出一个数,表示最多空的格子。
【输入样例】
1 1
2 3
【输出样例】
0
4
【数据范围】
100%数据保证:1<=n,m<=40,n*m<=40,数据小于等于5组
Solution
注意到合法状态其实不多。。
可以找规律或状压DP
Photo
【题目描述】
平面上有若干个点,现在要求用最少的底边在X轴上且面积小等A的矩形覆盖所有点,这些矩形可以重叠。
N<=100,A<=2000000
【输入描述】
第一行N,A
以下N行输入点坐标。
【输出描述】
一行,最少矩形数量
【输入输出样例】
Sample Input
6 4
2 1
4 1
5 1
5 4
7 1
6 4
Sample Output
3
【数据约定】
1 ≤ N ≤ 100
1 ≤ A ≤ 200 000
Each point has 0 ≤ x ≤ 3 000 000 and 1 ≤ y ≤ A
For 30% of the test cases, 1 ≤ N ≤ 18
Solution
可以发现,任意两个矩形要不然是不相交,要不然某个在另一个中间而且要更高一些。其他的情况总可以改为前2个情况。
考虑最优方案下,可以用一条竖线将覆盖矩形分成2份,而且不交于任何矩形,那么就根据这条线划分点,而且有N种可能。
如果不能呢就是第2种情况,存在一个矩形覆盖其他矩形的底部而且覆盖所有点的x坐标。
因此我们发现任何有关的初始状态的子集被3条线分离:在2条竖线间,在横线上。令
dp[i,j,k]
表示用最少数目覆盖点
(x,y)(xi≤x≤xj,yk≤y)
然后
其中 (ni,nj,nk) 表示边界左边,下边和右边的不被底部的矩形所覆盖的点。
时间复杂度 O(n4)