1605: [Usaco2008 Open]Crisis on the Farm 牧场危机

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 403  Solved: 145
[Submit][Status][Discuss]

Description

约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆一堆,共N(1≤N≤1000)堆.每一堆里,30只奶牛一只踩在另一只的背上,叠成一座牛塔.牧场里还有M(1≤M≤1000)个高高的草垛. 作为出色的指挥家,约翰可以通过口哨指挥奶牛们移动.他的口哨有四个音,分别能使所有的牛塔向东南西北四个方向移动一格.
    每一次,当一个牛塔到达了一个草垛所在的格子,牛塔最上方的奶牛就会跳到草垛上,而且不再下来,而其他奶牛仍然呈塔状站在草垛所在的格子里.当牛塔只剩一只奶牛时,这只奶牛也会跳到草垛上. 突然,约翰大惊失色:原来邻家的奶缸爆炸了!滚滚而下的牛奶正朝着约翰的牧场冲来,不久就要将牧场淹没.约翰必须马上行动,用口哨声挽救奶牛们的生命.他要指挥奶牛尽量多地跳上草垛,草垛上的奶牛将不会被淹死.    约翰还有K次吹口哨的机会.那他最多还能救多少奶牛呢?请计算最多能挽救的奶牛数,以及达到这个数目约翰需要吹的口哨调子序列.序列用E,W,S,N表示东西南北.如果有多种序列能达到
要求,输出作为字符串最小的.

Input

第1行输入三个整数N,M,K,之后N行每行输入一对整数(Xi,Yi)表示一座牛塔所在的位置,1<=K<=30
之后M行每行输入一对整数(Xi,Yi)表示一个草垛所在的位置.1≤Xi≤1000;1≤Yi≤1000.

Output

    第1行输出最多能挽救的奶牛数.第2行输出口哨调子序列.

Sample Input

3 6 3
3 4
6 2
5 7
8 2
9 2
6 4
5 4
6 7
8 7

Sample Output

6
EEE

dp[k][i][j]表示第k步所有奶牛的总体偏移量为(i, j)的最大挽救数

因为i, j可以为负,所以要整体+k

还要输出路径,反过来DFS一遍是必须的

不好写

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
typedef struct
{int x;int y;
}Point;
Point s1[1005], s2[1005];
int cnt[66][66], dp[33][66][66], dir[4][2] = {1,0,0,1,0,-1,-1,0};
char ans[33][66][66], Q[5] = "WSNE";
int main(void)
{int n, m, k, i, j, p, bet, f, q;scanf("%d%d%d", &n, &m, &k);for(i=1;i<=n;i++)scanf("%d%d", &s1[i].x, &s1[i].y);for(i=1;i<=m;i++)scanf("%d%d", &s2[i].x, &s2[i].y);for(i=1;i<=n;i++){for(j=1;j<=m;j++){if(abs(s1[i].x-s2[j].x)>k || abs(s1[i].y-s2[j].y)>k)continue;cnt[31+s1[i].x-s2[j].x][31+s1[i].y-s2[j].y]++;}}memset(ans, 'Z', sizeof(ans));memset(dp, -62, sizeof(dp));bet = 0;dp[0][31][31] = 0;for(p=1;p<=k;p++){for(i=1;i<=62;i++){for(j=1;j<=62;j++){dp[p][i][j] = max(max(dp[p-1][i-1][j], dp[p-1][i][j-1]), max(dp[p-1][i+1][j], dp[p-1][i][j+1]))+cnt[i][j];if(p==k)bet = max(bet, dp[p][i][j]);}}}for(i=1;i<=62;i++){for(j=1;j<=62;j++){if(dp[k][i][j]==bet)ans[k][i][j] = 'A';}}for(p=k-1;p>=0;p--){for(i=1;i<=62;i++){for(j=1;j<=62;j++){for(f=0;f<=3;f++){if(dp[p][i][j]+cnt[i+dir[f][0]][j+dir[f][1]]==dp[p+1][i+dir[f][0]][j+dir[f][1]] && ans[p+1][i+dir[f][0]][j+dir[f][1]]<'Z')ans[p][i][j] = Q[f];}}}}p = q = 31;printf("%d\n", bet);for(i=0;i<=k-1;i++){printf("%c", ans[i][p][q]);switch(ans[i][p][q]){case 'E': p--; break;case 'W': p++; break;case 'S': q++; break;case 'N': q--;}}printf("\n");return 0;
}

bzoj 1605: [Usaco2008 Open]Crisis on the Farm 牧场危机(DP)相关推荐

  1. [Usaco2008 Open]Crisis on the Farm 牧场危机

    1605: [Usaco2008 Open]Crisis on the Farm 牧场危机 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 288  S ...

  2. bzoj1605 洛谷2905 [Usaco2008 Open]Crisis on the Farm 牧场危机(DP)

    很暴力的一个题 这个题目大概分为以下几步 一.计算从原点走多少步产生的贡献 曼哈顿距离搞一搞 二.进行DP求最大值 按照字典序贪心的按WSNE进行DP,取最后一个 三.检查合格的终止点 便利一遍DP数 ...

  3. bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(DP)

    1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1616  Solv ...

  4. BZOJ 1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛【DP】

    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛 Time Limit: 5 Sec Memory Limit: 64 MB Description 奶牛们在被划分成N ...

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

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

  6. 1621: [Usaco2008 Open]Roads Around The Farm分岔路口(记忆化搜索)

    1621: [Usaco2008 Open]Roads Around The Farm分岔路口 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 883   ...

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

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

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

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

  9. How to fix the global rice crisis 如何应对全球稻米危机 | 经济学人20230401版双语精翻

    文 / 柳下婴(微信公众号:王不留) 4月1日<经济学人>周报封面即社论区(Leaders)精选文章:<如何应对全球稻米危机>(How to fix the global ri ...

最新文章

  1. git 将暂存区文件提交_Git知识
  2. STO双中心势能积分
  3. 配置ftp服务器亲测可用
  4. [MapReduce_add_4] MapReduce 的 join 操作
  5. Tensorflow笔记(基础): 图与会话,变量
  6. docker容器内漏洞_如何在2020年发现和修复Docker容器漏洞
  7. CentOS6.5与XP双系统安装
  8. LAMP_PHP配置
  9. 【机器学习】竞争神经网络(Competitive Neural Network)的python实现
  10. [转]innodb的锁时间
  11. MyBatis官方文档——XML配置部分
  12. Unhandled exception. System.NullReferenceException: Object reference not set to an....
  13. 数梅派4b 显示器_无显示器配置树莓派4B
  14. Linux驱动模块加载失败
  15. 命令行压缩工具7z.exe使用详解
  16. Gauss-Legendre求积公式-高斯型积分公式
  17. spring-狂神学习笔记-联系我获取md文档
  18. css 光影掠过文字效果
  19. Ionic Capacitor 插件开发
  20. 机械键盘组合键失灵、Windows键失灵

热门文章

  1. python 干什么工作具有明显优势-python能做什么?有哪些优点?
  2. python 代码命令大全-Linux命令大全
  3. 语音识别芯片的经典应用案例
  4. 语音情感识别的优选方法与流程
  5. Linux服务器的eth,linux做服务器安装两块网卡问题????
  6. JavaScript创建页面节点
  7. el-cascader获取label
  8. sql server php删除,使用 SQL Server 添加删除修改查询储存过程
  9. cad坐标提取插件_如何快速地将CAD里的坐标提取到Excel中?最简单的方法你知道吗?...
  10. python怎么存为动图_Python将视频或者动态图gif逐帧保存为图片的方法