很暴力的一个题
这个题目大概分为以下几步

一、计算从原点走多少步产生的贡献

曼哈顿距离搞一搞

二、进行DP求最大值

按照字典序贪心的按WSNE进行DP,取最后一个

三、检查合格的终止点

便利一遍DP数组即可

四、倒序求出路径

通过前后产生的差量判断是否可以转移

五、输出路径

按照ans的偏移量进行输出

End.

解析见注释
代码(换码风丑死了)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn = 64;
const int N = 1007;
const int INF = 2147483647;
int n,m,k,got,dp[maxn][maxn][maxn],cnt[maxn][maxn];
int dx[4]={1,0,0,-1};
int dy[4]={0,1,-1,0};
struct Point{int x,y;
};
Point s1[N],s2[N];
char ans[maxn][maxn][maxn],out[5]="WSNE";// 贪心的out数组
void get_IN(){scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++)scanf("%d%d",&s1[i].x,&s1[i].y);for(int i=1;i<=m;i++)scanf("%d%d",&s2[i].x,&s2[i].y);memset(ans,'Z',sizeof(ans));memset(dp,-100,sizeof(dp));dp[0][31][31]=0;
}void cal_DONATE(){for(int i=1;i<=n;i++)for(int 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]++;}
}
void cal_DP(){for(int p=1;p<=k;p++)for(int i=1;i<=62;i++)for(int j=1;j<=62;j++){dp[p][i][j]=max(max(dp[p-1][i-1][j],dp[p-1][i+1][j]),max(dp[p-1][i][j+1],dp[p-1][i][j-1]))+cnt[i][j];//   四个方向取最优 if(p==k)got=max(got,dp[p][i][j]);// 计算最大值 }
}void Check(){for(int i=1;i<=62;i++)for(int j=1;j<=62;j++)if(dp[k][i][j]==got)ans[k][i][j]='A';// 是最大就标记
}void get_EDGE(){for(int p=k-1;p>=0;p--)for(int i=1;i<=62;i++)for(int j=1;j<=62;j++)for(int r=0;r<=3;r++)if(dp[p][i][j]+cnt[i+dx[r]][j+dy[r]]==dp[p+1][i+dx[r]][j+dy[r]]&&ans[p+1][i+dx[r]][j+dy[r]]<'Z')// 前一个点可以转移且转移的差值等于增值 ans[p][i][j]=out[r];//  符合条件就储存,out的顺序保证了,最后一个的字典序最优
}void slove(){cal_DONATE();cal_DP();Check();get_EDGE();
}void Cout(){int p=31,q=31;// 防止负下标的平移量 printf("%d\n",got);for(int 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--;}}
}
int main(){get_IN();slove();Cout();  return 0;
}

bzoj1605 洛谷2905 [Usaco2008 Open]Crisis on the Farm 牧场危机(DP)相关推荐

  1. bzoj 1605: [Usaco2008 Open]Crisis on the Farm 牧场危机(DP)

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

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

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

  3. NOIP2017洛谷P3953:逛公园(分层图最短路、dp、拓扑)

    解析 容易想到dp 先跑一遍最短路把每个点的dis求出来 设计dpu,xdp_{u,x}dpu,x​表示结点u多走了x的方案数 dp按照dis升序排列后,从前到后转移即可 如果有0边,求出只有0边时的 ...

  4. 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  5. 洛谷 P2919 [USACO08NOV]守护农场Guarding the Farm

    题目描述 The farm has many hills upon which Farmer John would like to place guards to ensure the safety ...

  6. 洛谷P1879 [USACO06NOV]玉米田Corn Fields【状压dp】

    P1879 [USACO06NOV]玉米田Corn Fields 时间限制 1.00s 内存限制 125.00MB 题目描述 Farmer John has purchased a lush new ...

  7. 洛谷 P4544 [USACO10NOV]Buying Feed G)(单调队列优化DP)

    题目链接:P4544 [USACO10NOV]Buying Feed G 建议做这题前先做下这题P1886 滑动窗口 /[模板]单调队列 我们可以用dp[i][j]表示当前走到前i个点,已经买了j吨饲 ...

  8. 【题解】洛谷P1373 小a和uim之大逃离(dp 递推)

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

  9. 洛谷 P5536 【XR-3】核心城市(贪心 + 树形 dp 寻找树的中心)

    [XR-3]核心城市 题目描述 X 国有 nnn 座城市,n−1n - 1n−1 条长度为 111 的道路,每条道路连接两座城市,且任意两座城市都能通过若干条道路相互到达,显然,城市和道路形成了一棵树 ...

最新文章

  1. java深度克隆_浅析Java中clone()方法浅克隆与深度克隆
  2. Squid access.log 转发到其他syslog服务器(OSSIM)
  3. 墙面也能变镜子,只看影子就能还原视频,MIT新算法让摄像头无死角
  4. session与cookie的区别
  5. 玩! 框架:为什么我会爱上它
  6. CompletableFuture的多线程和异步监听实现
  7. 浏览器停止加载页面内容
  8. LINUX 硬盘分区及文件系统
  9. ios图片剪切之圆形头像
  10. matlab实验shi,matlab 实验六 古典密码与破译
  11. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_4字符输出流的基本使用_写出单个字符...
  12. 精通Hyperledger之Hyperledger composer建模语言(15)
  13. 用计算机创造的音乐,【电影音乐论文】计算机音乐技术在电影音乐中的运用(共1977字)...
  14. java怎么做摇杆_DJI虚拟摇杆控制未正确应用
  15. 读书印记 - 《批判性思维工具》
  16. vue axios封装及使用
  17. 晚上的笔记:p2p vod
  18. 30岁上下的你,现在混得怎么样?
  19. math_高阶导数求导法则和公式
  20. Bellman 贝尔曼方程究竟是什么

热门文章

  1. cadence 通孔焊盘_通孔焊盘内走线不报错
  2. 简七32堂极简理财课——模块三:日常理财,让你时时刻刻都有钱
  3. kubernetes 网络
  4. BAP:PPP 带宽分配协议 BACP:PPP 带宽分配控制协议--网络大典
  5. Google(谷歌)高级搜索
  6. vscode CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘.解决
  7. 全球回报最好的 40 个 VC 投资案例,我们可以从中学到什么?
  8. 如何将nc文件转化为txt格式
  9. 解决everything只能搜索C盘的问题
  10. 谁说程序员年龄大了,就没出路了?