题目描述

约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆 一堆,共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.

输入输出样例

输入样例#1:

3 6 3
3 4
6 2
5 7
8 2
9 2
6 4
5 4
6 7
8 7
输出样例#1:

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的更多相关文章

  1. 洛谷P2905 [USACO08OPEN]农场危机Crisis on the Farm

    P2905 [USACO08OPEN]农场危机Crisis on the Farm 题目描述 约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆 一堆,共1000)堆.每 ...

  2. bzoj1605 / P2905 [USACO08OPEN]农场危机Crisis on the Farm

    P2905 [USACO08OPEN]农场危机Crisis on the Farm 发现总步数$k<=30$,考虑用$k$瞎搞 设$f[u][i][j]$表示已经吹$u$次哨,全体奶牛向右走$i ...

  3. P2905 [USACO08OPEN]农场危机Crisis on the Farm

    传送门 DP 设 f [ i ] [ j ] [ k ] 表示已经走了 i 步,向上走了 j 步,向右走了 k 步时能拯救的最多奶牛数(j,k可以为负,表示反向) 设 g [ i ] [ j ] 表示 ...

  4. P2905 [USACO08OPEN]农场危机Crisis on the Farm(简单dp+麻烦“回溯”)

    惯例,化简题意(看长短决定难度) 一块草坪上有两种点(姑且称为a和b),各有坐标,现在能同时使所有a点向东西南北任意一个方向移动一个单位,若a点与b点重合,则答案增加重合数,求答案的最大值并且求出这个 ...

  5. 洛谷——P2908 [USACO08OPEN]文字的力量Word Power

    P2908 [USACO08OPEN]文字的力量Word Power 题目描述 Farmer John wants to evaluate the quality of the names of hi ...

  6. 洛谷——P2910 [USACO08OPEN]寻宝之路Clear And Present Danger

    P2910 [USACO08OPEN]寻宝之路Clear And Present Danger 题目描述 Farmer John is on a boat seeking fabled treasur ...

  7. 洛谷 P3079 [USACO13MAR]农场的画Farm Painting

    P3079 [USACO13MAR]农场的画Farm Painting 题目描述 After several harsh winters, Farmer John has decided it is ...

  8. 洛谷 P2908 [USACO08OPEN]文字的力量Word Power

    P2908 [USACO08OPEN]文字的力量Word Power 题目描述 Farmer John wants to evaluate the quality of the names of hi ...

  9. 洛谷 P2906 [USACO08OPEN]牛的街区Cow Neighborhoods | Set+并查集

    题目: https://www.luogu.org/problemnew/show/P2906 题解: 垃圾水题 #include<cstdio> #include<algorith ...

随机推荐

  1. RequestsLibrary库入门介绍

    Robot framework也可以进行接口测试,只需要导入相应的RequestsLibrary库即可. 一.准备工作: 首先需要安装好Robot framework基础环境,前面已做说明,本文就不做 ...

  2. LaTeX 语法

    MathJax是什么? MathJax是一个开源JavaScript库.它支持LaTeX.MathML.AsciiMath符号,可以运行于所有流行浏览器上. LaTeX是什么? LaTeX(LATEX ...

  3. LayUI 子父窗体的交互

    ---恢复内容开始--- 收到的工作是将一个ERP的窗体程序改为网页实现,所以就肯定需要弹框来选择(如:物料编码.部门.业务员等等) 本文采取的前段框架是LayUI. layUI的官网API网址:ht ...

  4. python 之 time模块、datetime模块(打印进度条)

    6.9 time 模块 方法 含义 备注 time.time() 时间戳 1561013092.997079 time.strftime('%Y-%m-%d %H:%M:%S %p') 结构化时间st ...

  5. JS数组去重精简版

    看了很多人写的好几个去重方法,我在这里精简组合下,适用于已排序与未排序的数组. 废话不多说,上代码. <!DOCTYPE html> <html> <head> & ...

  6. link-1-STL 标准模板库

    STL(Standard Template Library,标准模版库)是C++语⾔言标准中的重要组成部分.STL以模板类和模版函数的形式为程序员提供了了各种数据结构和算法的实现,程序员吐过能够充分的 ...

  7. linux grep (转)

    常用用法 [root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 选项与参数: -a :将 binary 文件以 text 文件的方式搜 ...

  8. Vuex有哪些作用

    1.Vuex实现路由数据通讯 点击跳转路由的时候,把写入vuex,跳转后取出vuex

  9. hdu1392凸包裸题

    //极角排序 #include <bits/stdc++.h> #define sqr(x) ((x)*(x)) using namespace std; ],top; struct PO ...

  10. Linux unzip用法

    1.把文件解压到当前目录下 unzip test.zip 2.如果要把文件解压到指定的目录下,需要用到-d参数. unzip -d /temp test.zip 3.解压的时候,有时候不想覆盖已经存在 ...