传送门

DP

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

设 g [ i ] [ j ] 表示牛向上走 i 步,向右走 j 步后有多少奶牛恰好在草堆上(同样 i , j 可负)

那么 f [ i ] [ j ] [ k ] = max( f [ i-1 ] [ j -1 ] [ k ] , f [ i-1 ] [ j ] [ k-1 ] , f [ i-1 ] [ j+1 ] [ k ] ,f [ i-1 ] [ j ] [ k+1 ]) +g [ j ] [ k ]

因为数组下标不能为负,所以要把坐标集体加上一个 K

为了方便按字典序输出,我们要倒过来推,并且要按字典序的方向来枚举

即从 f [ k ] 推到 f [ 0 ] 枚举方向为 'E' 'N' 'S' 'W'

好像不太好讲,具体还是看代码吧,代码不难的

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=,K=;
int n,m,k;
int xx[]={,,,-},yy[]={,,-,};
char mp[]={'E','N','S','W'};
int f[K<<][N][N],g[K<<][K<<];
int cow[N][],hay[N][];
int main()
{
n=read(); m=read(); k=read();
for(int i=;i<=n;i++) cow[i][]=read(),cow[i][]=read();
for(int i=;i<=m;i++) hay[i][]=read(),hay[i][]=read();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(abs(hay[j][]-cow[i][])+abs(hay[j][]-cow[i][])<=k)//如果可以到达才计算贡献
g[hay[j][]-cow[i][]+K][hay[j][]-cow[i][]+K]++;//预处理g
for(int i=k;i>=;i--)
for(int x=K-i;x<=K+i;x++)
for(int y=K-i;y<=K+i;y++)//注意大小写K的区别
{
for(int o=;o<;o++) f[i][x][y]=max(f[i][x][y],f[i+][x+xx[o]][y+yy[o]]);
f[i][x][y]+=g[x][y];
}
printf("%d\n",f[][K][K]);
int posx=K,posy=K;//存当前位置
for(int i=;i<k;i++)
{
int o;
for(o=;o<;o++) if(f[i][posx][posy]==f[i+][posx+xx[o]][posy+yy[o]]+g[posx][posy]) break;//如果是从o推过来的就断开
posx+=xx[o]; posy+=yy[o];
printf("%c",mp[o]);
}
return ;
}

最新文章

  1. [原创]Centos7 内部常用软件升级计划
  2. 时间就像Hourglass一样,积累(沉淀)越多,收获越大
  3. ACM: 限时训练题解-Heavy Coins-枚举子集-暴力枚举
  4. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
  5. 创建并使用Windows Azure虚拟机模板
  6. IIS启用.net2.0
  7. ES5中的有9个Array方法
  8. shell ftp上传下载文件
  9. 【4】python核心编程 第七章-映射和集合类型
  10. OpenLayers访问WTMS服务及添加Googlemap
  11. HNTX_PC 代码总结
  12. Unity 大中华区核心业务
  13. Ubuntukylin 14.04 系统语言改成中文[转]
  14. Java Spring Boot VS .NetCore (三)Ioc容器处理
  15. js实现全屏和缩放
  16. ESP8266开发综合篇第一节(LUA)-下载和刷固件
  17. 《你不知道的javascript》读书笔记2
  18. jq 某个时间段的倒计时
  19. BitSet 是个好东西
  20. sklearn学习总结(超全面)

热门文章

  1. Linux 查看一个端口的连接数
  2. Zbar 大图像分析
  3. 算法Sedgewick第四版-第1章基础-003一封装日期
  4. R: 关于文件 文件夹的处理:file.show() dir.create().....
  5. Python程序设计8——网络编程
  6. Excel课程学习
  7. SDUT 3373 数据结构实验之查找一:二叉排序树
  8. HttpGet和HttpPost处理重定向的区别
  9. SpringMVC执行流程(四)
  10. Delphi和C#数据类型对应表