数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本是货郎担问题(TSP),状压中挺常出现的问题 f[s][i]表示状态s下到第i个有宝藏的地方,是否能拿到所有s中的宝藏 当然最后还要考虑dis[id[i]][1]是否大于s状态下的宝藏数,取较小值就是答案了 跑了48ms,优化一下应该可以更快.. #include<stdio.h> #includ…
Description ​ 很少人知道其实奶牛非常喜欢到洞穴里面去探险. ​ 洞窟里有N(1≤N≤100)个洞室,由M(1≤M≤1000)条双向通道连接着它们.每对洞室间 至多只有一条双向通道.有K(1≤K≤14)个洞室,里面放有1捆干草.牛吃1捆干草,体重指数就会增加1. ​ 贪吃的贝茜要到洞窟里面探险.她希望能吃尽量多的干草,但每条通道有一个宽度阈值,如果体重指数超过相应的阈值,贝茜就会被卡祝她从洞窟1出发,体重指数为0.在洞里溜达一圈后,她要返回洞窟1. 那她最多能吃多少捆干草呢?注意,贝…
3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 21  Solved: 18[Submit][Status][Discuss] Description     洞窟里有一道长长的通道.它由N(1≤N≤25000)段道尾相连构成,编号分别为1到N.每个通道有一个阈值,其范围在[1,10^9]依次通过i..j的通道,那奶牛的体重指数就不能超过i..j通道中阈值的最小值.…
3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 64  Solved: 37[Submit][Status][Discuss] Description     很少人知道其实奶牛非常喜欢到洞穴里面去探险.     洞窟里有N(1≤N≤100)个洞室,由M(1≤M≤1000)条双向通道连接着它们.每对洞室间 至多只有一条双向通道.有K(1≤K≤14)个洞室,里面放有1…
bzoj3383[Usaco2004 Open]Cave Cows 4 洞穴里的牛之四 题意: 平面直角坐标系有n个点,从(0,0)出发,从一个点上可以跳到所有与它横纵坐标距离都≤2的点上,求最少步数使得纵坐标为T. 题解: 先用set存下所有的点.在做dp的时候把所有横纵坐标与当前节点距离≤2的节点都在set中查找,如果可以查到则可以转移到那个节点. 代码: #include <cstdio> #include <cstring> #include <algorithm&g…
bzoj3381[Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 题意: RMQ问题.序列长度≤25000,问题数≤25000. 题解: 倍增. 代码: #include <cstdio> #include <cstring> #include <algorithm> #define inc(i,j,k) for(int i=j;i<=k;i++) #define maxn 25100 using namespace std; inline…
还是蛮简单的一道题,首先dfs一遍,在所有能到达放有干草的洞穴的所有路径中,找出路径上最小伐值的最大值,按这个值由小到大,再来一遍贪心就行了,能放就放,不能放拉倒(也可以理解为,不能放把最前一个删了). 但是如果题目改为每个洞穴不止一堆干草的话,也是没有问题的,只要在队列上在维护一个小根堆,判断队列中最小的干草堆是否比当前小,小则替换,否则不变. ; type node=record f,t,w:longint; end; var n,i,j,m,k,u,v,x,now,ans:longint;…
这个系列总算是做完了,这是我第一次高效率做完四道题,虽然中间有两道水题,但是第一和第四题还是蛮好的,但是只要能想到思路就很快能打完的. 像这道题,刚开始在想能不能用DP?但是苦于不知道怎么实施,后来又想,这么多点,有点像最短路径,但是总共有50000个点,边数有可能N*N吗? 于是我拿起笔算了一下,发现连边的话,先按X轴由小到大排序一遍,然后往后找 X 比当前点大 <=2 的 X,再通过比较 Y 之间的关系,只要相差不超过 2 就连接一条双向边,这样后面的点就不需要往前找了,但有人会问,会不会是…
首先,我们先确定,最长的曼哈顿距离只可能为 x1+y2-(x2+y2) 和 x1-y1-(x2-y2) 所以我们只需要维护四个值, 分别代表 max(x+y) ; max(x-y) ; min(x+y) ; min(x-y) ; 因此答案也就是 max(max(x+y)-min(x+y),max(x-y)-min(x-y)). ; var maxadd,minadd,maxdec,mindec,i,a,b,n:longint; function max(a,b:longint):longint;…
这题..思维上远没有上一题复杂,是一个裸的RMQ..利用倍增就可以解决了. var n,q,i,j,f,t,c:longint; a:array[..,..] of longint; function min(a,b:longint):longint; begin if a>b then exit(b) else exit(a); end; begin readln(n,q); to n do readln(a[,i]); to trunc(ln(n)/ln())+ do to n-( shl…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3382 [题解] 套路题. 首先我们会发现曼哈顿距离不好处理,难道要写kdtree??? (kdtree真的可以写啊qwq) 曼哈顿距离转成切比雪夫距离. (x,y) ==> (x+y, x-y),那么就把坐标分离了. 然后对于每个坐标单独排序后求最大的差即可. # include <stdio.h> # include <string.h> # include <…
总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 很少人知道其实奶牛非常喜欢到洞穴里面去探险.     洞窟里有N(1≤N≤100)个洞室,由M(1≤M≤1000)条双向通道连接着它们.每对洞室间 至多只有一条双向通道.有K(1≤K≤14)个洞室,里面放有1捆干草.牛吃1捆干草,体重指数就会增加1.     贪吃的贝茜要到洞窟里面探险.她希望能吃尽量多的干草,但每条通道有一个宽度阈值,如果体重指数超过相应的阈值,贝茜就会被卡祝她从洞窟1出…
这个状压dp其实很明显,n < 18写在前面了当然是状压.状态其实也很好想,但是有点问题,就是如何判断空间是否够大. 再单开一个g数组,存剩余空间就行了. 题干: 题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better known fact is that cows really don't like going down stairs. So after…
题目 贪心,可以用分类讨论的方法,可以得出如果\(n^2\)枚举则会过不了,而我们观察原题中的式子,有: \(∣x1−x2∣+∣y1−y2∣\) 发现式子中的绝对值很恶心,而考虑如果没有绝对值的话会有四种情况. \((x1-x2)+(y1-y2)=x1+y1-(x2+y2)\) \((x1-x2)-(y1-y2)=x1-y1-(x2-y2)\) \(-(x1-x2)+(y1-y2)=x2-y2-(x1-y1)\) \(-(x1-x2)-(y1-y2)=x2+y2-(x1+y1)\) 可以发现x2…
状压DP: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(register int a = (b); a >= (c); -- a)…
传送门 状压dp入门题. 按照题意建一个图. 要求的就是合法的链的总数. 直接f[i][j]f[i][j]f[i][j]表示当前状态为jjj,下一位要跟iii连起来的方案数. 然后从没被选并且跟iii连通的点转移就行了. 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=20; bool tran[N][N]; int n,K,up,s[N]; ll f[N][1<<…
第一眼是3^n*n的做法...然而并不可行T T 后来发现对于奶牛的一个状态i,最优情况下剩下那个可以装奶牛的电梯剩下的可用重量是一定的,于是我们设f[i]表示奶牛状态为i的最小电梯数,g[i]为奶牛状态为i剩下那个电梯的可用重量,每次都枚举一个奶牛看看能不能塞进电梯就好,塞不进就新开一个电梯. #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include&l…
参见ZHT467的题解. f[i]表示在i这个集合下的最少分组数和当前组最少的容量. 从1到(1<<n)-1枚举i,对于每个i枚举它的子奶牛,然后重载运算符计算. 代码如下 #include<iostream> #include<cstdio> #include<cstring> #include<cctype> #include<cmath> #include<algorithm> using namespace std…
题目 传送们 大意 约翰家有N头奶牛,第i头奶牛的编号是Si,每头奶牛的编号都是唯一的.这些奶牛最近 在闹脾气,为表达不满的情绪,她们在挤奶的时候一定要排成混乱的队伍.在一只混乱的队 伍中,相邻奶牛的编号之差均超过K.比如当K = 1时,1, 3, 5, 2, 6, 4就是一支混乱的队伍, 而1, 3, 6, 5, 2, 4不是,因为6和5只差1.请数一数,有多少种队形是混乱的呢? 思路 定义f[i][j]表示最后一头牛是i且前i头牛的状态, f[i][1<<(i-1)]=1,当最后一头牛是i…
枚举末位状态 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #define R(a,b,c) for(register int a = (b); a <= (c); ++ a) #define nR(a,b,c) for(register int a = (b); a >= (c); -- a…
果然写得短就跑得慢... 直接用set就行了(你要写棵平衡树也可以).没有包含的话, 假如L(i) <= L(j), 那么R[i] <= R[j]. 所以从小到大扫, 每次查找左端点小于当前的第一只牛, 然后判断右端点就行了. ----------------------------------------------------------------- #include<bits/stdc++.h> using namespace std;   typedef pair<…
bzoj3375[Usaco2004 Mar]Paranoid Cows 发疯的奶牛 题意: 依次给出n只奶牛的产奶时间段,求最大的k使得前k只奶牛不存在一个时间段被另一个时间段完全覆盖的情况.n≤100000. 题解: 设当前在处理第i只奶牛,前i-1只奶牛都合法.那么如果前i-1只奶牛中时间段左端点小于且最接近第i只奶牛时间段左端点的奶牛右端点大于当前奶牛则不合法,且如果前i-1只奶牛中时间段左端点大于且最接近第i只奶牛时间段左端点的奶牛右端点小于第i只奶牛则不合法,这是一个贪心的过程,可以…
嘟嘟嘟 看完题后突然想起jf巨佬的话:"看到曼哈顿距离就想转切比雪夫距离." 于是我就转换了一下. 然后问题变成了求 \[max_{i, j \in n} \{ max \{ |x_i - x_j|, |y_i - y_j| \} \}\] 令差最大,只要分别找出\(x, y\)的最小值和最大值即可. \(O(n)\)扫一遍啦. #include<cstdio> #include<iostream> #include<cmath> #include&…
传送门 Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 46727   Accepted: 15899 Description Bessie is out in the field and wants to get back to the barn to get as much sleep as possible before Farmer John wakes her for…
原题地址 观察数据范围:4 ≤ N ≤ 16. 很明显,这是一道状压DP. 定义:dp[i][j]表示队尾为奶牛i,当前含奶牛的状态为j,共有多少组符合条件的队伍. 代码实现如下: #include <bits/stdc++.h> using namespace std; #define LL long long #define rep(i, a, b) for (register int i = a; i <= b; i++) ; int n, m; LL ans = ; int a[…
考场上空间开大了一倍就爆0了QAQ- Code: #include<cstdio> #include<algorithm> #include<cmath> using namespace std; const int maxn = 21; int height[30], pos[30]; long long dp[1 << maxn][21]; int main() { int n, delta; scanf("%d%d",&n,…
bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就很好做了.F[I,j]表示第i个点,高度>=j或<=j,f[I,j]=min(f[i-1,j]+abs(b[j]-a[i]),f[I,j-1]) 1593: [Usaco2008 Feb]Hotel 旅馆 线段树 ★1594: [Usaco2008 Jan]猜数游戏 二分答案然后写线段树维护 15…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
目录 DP百题练(二) 区间 DP NOI1995 石子合并 IOI1998 Polygon CH5302 金字塔 USACO06FEB Treats for the Cows G/S LG1043 数字游戏 LG1063 能量项链 LG1005 矩阵取数游戏 LG3146 [USACO16OPEN]248 G 树形 DP LG1352 没有上司的舞会 CTSC1997 选课 LG1273 有线电视网 POJ3585 Accumulation Degree LG3478 [POI2008]STA…
关于题目: 题目地址:http://www.cnblogs.com/xinz/p/3318230.html 首先,不得不说自从写完第一次作业,我就开始“抠”这个题,第一眼看这个题就感觉好“坑”,读一遍之后什么都木有发现,满满的一头雾水.连题目的描述都木有看明白!如图:文件格式描述中的输入数据格式是“每一行的元素,”样例元素是“5,6,-3,8,-9,2”.那么,“2”这个行末元素后面要不要加个逗号呢?32位有符号整数是默认成二进制表示的?我们假设输入格式是有“,”并且老师不会搞一个32位的十进制…