洛谷 P2905 [USACO08OPEN]农场危机Crisis on the Farm
题目描述
约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆 一堆,共1000)堆.每一堆里,30只奶牛一只踩在另一只的背上,叠成一座牛塔.牧场 里还有M(1 < M < 1000)个高高的草垛.
作为出色的指挥家,约翰可以通过口哨指挥奶牛们移动.他的口哨有四个音,分别能使所有 的牛塔向东南西北四个方向移动一格.
每一次,当一个牛塔到达了一个草垛所在的格子,牛塔最上方的奶牛就会跳到草垛上,而且 不再下来,而其他奶牛仍然呈塔状站在草垛所在的格子里.当牛塔只剩一只奶牛时,这只奶牛也 会跳到草垛上.
突然,约翰大惊失色:原来邻家的奶缸爆炸了!滚滚而下的牛奶正朝着约翰的牧场冲来,不久就要将牧场淹没.约翰必须马上行动,用口哨声挽救奶牛们的生命.他要指挥奶牛尽量多地跳 上草操,草操上的奶牛将不会被淹死.
约翰还有K次吹口哨的机会.那他最多还能救多少奶牛呢?请计算最多能挽救的奶牛数,以及 达到这个数目约翰需要吹的口哨调子序列.序列用E,W,S,N表示东西南北.如果有多种序列能达到 要求,输出作为字符串最小的.
输入输出格式
输入格式:
Line 1: Three space-separated integers: N, M, and K
Lines 2..N+1: Line i+1 describes the X,Y location of a stack of 30 cows using two space-separated integers: X_i and Y_i
- Lines N+2..N+M+1: Line i+N+1 describes the X,Y location of a haystack using two space-separated integers: X_i and Y_i
输出格式:
Line 1: A single integer that is the most number of cows that can be saved.
- Line 2: K characters, the lexicographically least sequence of commands FJ should issue to maximize the number of cows saved.
输入输出样例
3 6 3
3 4
6 2
5 7
8 2
9 2
6 4
5 4
6 7
8 7
6
EEE
说明
Use the 'east' whistle three times, at which point the milk floods the area. Each haystack ends up saving 1 cow.
dp 恶心。。
一个神奇的问题:
考试时我读不完数据 (#‵′)靠
前面的很正常
m个草都是0的读不完。。
读入优化超时
cin scanf读不进去 直接炸内存。。
#include <cstring>
#include <cstdio>
#define N 35
#define M 2005
#define INF 0x3f3f3f3f
int n,m,k,ans=,x[M],y[M],li=,lj=,f[N<<][N<<][N],newmap[N<<][N<<],Map[M][M],fx[]={-,,,},fy[]={,-,,};
char pre[N<<][N<<][N],pick[N];
inline int max(int a,int b) {return a>b?a:b;}
void init_map()
{
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
for(int l=;l<=n;l++)
{
int X=x[l],Y=y[l];
if(X+i-<=||Y+j-<=||X+i->||Y+j->) continue;
newmap[i][j]+=Map[X+i-][Y+j-];
}
}
}
}
int main()
{
// freopen("dance.in","r",stdin);freopen("dance.out","w",stdout);
pick[]='W',pick[]='S',pick[]='N',pick[]='E';
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=n;i++) scanf("%d%d",&x[i],&y[i]);
for(int x,y,i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
Map[x][y]++;
}
init_map();
for(int i=;i<=k;i++)
for(int j=;j<=;j++)
for(int l=;l<=;l++)
f[j][l][i]=-INF,pre[j][l][i]='Z';
f[][][]=;
for(int i=;i<=k;i++)
{
for(int j=;j<=;j++)
{
for(int l=;l<=;l++)
{
f[j][l][i]=max(max(f[j-][l][i-],f[j][l-][i-]),max(f[j][l+][i-],f[j+][l][i-]))+newmap[j][l];
if(i==k) ans=max(ans,f[j][l][i]);
}
}
}
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(f[i][j][k]==ans)
pre[i][j][k]='A';
for(int l=k-;l>=;l--)
{
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
for(int o=;o<;o++)
{
if(f[i][j][l]+newmap[i+fx[o]][j+fy[o]]==f[i+fx[o]][j+fy[o]][l+]&&pre[i+fx[o]][j+fy[o]][l+]<'Z')
pre[i][j][l]=pick[o];
}
}
}
}
printf("%d\n",ans);
for(int i=;i<k;i++)
{
printf("%c",pre[li][lj][i]);
if(pre[li][lj][i]=='E') li++;
else if(pre[li][lj][i]=='N') lj++;
else if(pre[li][lj][i]=='S') lj--;
else if(pre[li][lj][i]=='W') li--;
}
return ;
}
洛谷 P2905 [USACO08OPEN]农场危机Crisis on the Farm的更多相关文章
- 洛谷P2905 [USACO08OPEN]农场危机Crisis on the Farm
P2905 [USACO08OPEN]农场危机Crisis on the Farm 题目描述 约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆 一堆,共1000)堆.每 ...
- bzoj1605 / P2905 [USACO08OPEN]农场危机Crisis on the Farm
P2905 [USACO08OPEN]农场危机Crisis on the Farm 发现总步数$k<=30$,考虑用$k$瞎搞 设$f[u][i][j]$表示已经吹$u$次哨,全体奶牛向右走$i ...
- P2905 [USACO08OPEN]农场危机Crisis on the Farm
传送门 DP 设 f [ i ] [ j ] [ k ] 表示已经走了 i 步,向上走了 j 步,向右走了 k 步时能拯救的最多奶牛数(j,k可以为负,表示反向) 设 g [ i ] [ j ] 表示 ...
- P2905 [USACO08OPEN]农场危机Crisis on the Farm(简单dp+麻烦“回溯”)
惯例,化简题意(看长短决定难度) 一块草坪上有两种点(姑且称为a和b),各有坐标,现在能同时使所有a点向东西南北任意一个方向移动一个单位,若a点与b点重合,则答案增加重合数,求答案的最大值并且求出这个 ...
- 洛谷——P2908 [USACO08OPEN]文字的力量Word Power
P2908 [USACO08OPEN]文字的力量Word Power 题目描述 Farmer John wants to evaluate the quality of the names of hi ...
- 洛谷——P2910 [USACO08OPEN]寻宝之路Clear And Present Danger
P2910 [USACO08OPEN]寻宝之路Clear And Present Danger 题目描述 Farmer John is on a boat seeking fabled treasur ...
- 洛谷 P3079 [USACO13MAR]农场的画Farm Painting
P3079 [USACO13MAR]农场的画Farm Painting 题目描述 After several harsh winters, Farmer John has decided it is ...
- 洛谷 P2908 [USACO08OPEN]文字的力量Word Power
P2908 [USACO08OPEN]文字的力量Word Power 题目描述 Farmer John wants to evaluate the quality of the names of hi ...
- 洛谷 P2906 [USACO08OPEN]牛的街区Cow Neighborhoods | Set+并查集
题目: https://www.luogu.org/problemnew/show/P2906 题解: 垃圾水题 #include<cstdio> #include<algorith ...
随机推荐
- linux命令配置IP详解
在Linux系统中,TCP/IP网络是通过若干个文本文件进行配置的,有时需要编辑这些文件来完成联网工作. vi /etc/sysconfig/network-scripts/ifcfg-eth0 :进 ...
- 2-1 本章作业&2-2 开发系统与工具选择
2-1 2-2 推荐使用Android Studio开发Flutter
- 性能压测,SQL查询异常
早上测试对性能压测,发现取sequence服务大量超时报错,查询线上的监控SQL: 大量这个查询,我在DeviceID和Isdelete上建有复合索引,应该很快,而且我测试了一下,取值,执行效率很高, ...
- ASP.NET Core 3.0 自动挡换手动挡:在 Middleware 中执行 Controller Action
最近由于发现奇怪的 System.Data.SqlClient 性能问题(详见之前的博文),被迫提前了向 .NET Core 3.0 的升级工作(3.0 Preview 5 中问题已被修复).郁闷的是 ...
- offsetLeft在各浏览器的值
上网找了好久没有找到一个offsetLeft在各浏览器的值,自己用了一晚上的时间在各浏览器测试出来的offsetLeft的值. <!DOCTYPE html> <html lang= ...
- cf808D(xjb)
题目链接:http://codeforces.com/problemset/problem/808/D 题意:问能不能通过交换不超过两个元素的位置使得原数组变成能分成前,后和相等的连续两部分: 注意这 ...
- loj #6079. 「2017 山东一轮集训 Day7」养猫【最大费用最大流】
首先假设全睡觉,然后用费用流考虑平衡要求建立网络流 把1~n的点看作是i-k+1~k这一段的和,连接(i,i+k,1,e[i]-s[i]),表示把i改成吃饭,能对i~i+k-1这一段的点产生影响:然后 ...
- PJzhang:python快速搭建局域网文件共享服务器
猫宁!!! 参考链接:https://www.cnblogs.com/nopnog/p/8116848.html https://www.cnblogs.com/yili16438/p/d320932 ...
- 黑马学习Ajax 概念和基本使用
- 关于Mac系统中my sql 和navicat for mysql 的连接问题。
我这个完完全全的技术小小白,经过数个小时的网搜,navicat for mysql和mysql终于可以可以正常连接了,好开森啊!,我把我遇到的问题,以及解决方法记录下来,希望也可以对遇到同样问题的能够 ...