dp,阶段就是步数。

本蒟蒻想不出来,只好用题解大法:四个方向的走路,dp的阶段是步数,每个点可以由四个方向转移而来。这是逆序做的。他这样做的好吃是最后回到原点,然后逆序找字典序最小即可。

独立思考下,如果从原点出发,那么向四个方向走,需要找出最大值和字典序最小的路径。因此,对每个点,值变化的时候更新值,值不变但路径更小的时候也更新。

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
const int N=1000,T=31;
const int dx[]={1,0,0,-1},dy[]={0,1,-1,0};
string d="ENSW";
//方向增量按字母字典序的顺序给出:E,N,S,W
int n,m,k,i,j,s,t,x[N],y[N],p[N],q[N],g[T*2][T*2],f[T][T*2][T*2],u,v,ans=0;
int ew[70],ns[70],Tk;
string st[T][T*2][T*2];
string minst="Z";
//因为下标不能为负,所以向南向西的负数要加上T使之为正
int max(int x,int y){return x>y?x:y;}
int abs(int x){return x>0?x:-x;}
int main(){for(int i=1;i<T;i++)for(int j=0;j<2*T;j++) for(int k=0;k<2*T;k++)st[i][j][k]+='Z';scanf("%d%d%d",&n,&m,&k);Tk=  k+1;for(i=0;i<n;i++)scanf("%d%d",x+i,y+i);for(i=0;i<m;i++)scanf("%d%d",p+i,q+i);for(i=0;i<n;i++)for(j=0;j<m;j++)if(abs(p[j]-x[i])+abs(q[j]-y[i])<=k)g[p[j]-x[i]+Tk][q[j]-y[i]+Tk]++;for(t=0;t<k;t++)for(u=Tk-t;u<=Tk+t;u++)for(v=Tk-t;v<=Tk+t;v++){if(abs(u-Tk)+abs(v-Tk)>t)continue;               for(int i=0;i<4;i++){if(f[t+1][u+dx[i]][v+dy[i]]<f[t][u][v]+g[u+dx[i]][v+dy[i]]){f[t+1][u+dx[i]][v+dy[i]]=f[t][u][v]+g[u+dx[i]][v+dy[i]];st[t+1][u+dx[i]][v+dy[i]]=st[t][u][v]+d[i];}else if(f[t+1][u+dx[i]][v+dy[i]]==f[t][u][v]+g[u+dx[i]][v+dy[i]]&&st[t+1][u+dx[i]][v+dy[i]]>st[t][u][v]+d[i])st[t+1][u+dx[i]][v+dy[i]]=st[t][u][v]+d[i];ans=max(ans,f[t+1][u+dx[i]][v+dy[i]]);}                                }for(u=Tk-t;u<=Tk+t;u++)for(v=Tk-t;v<=Tk+t;v++)if(f[k][u][v]==ans)minst=min(minst,st[k][u][v]);cout<<ans<<endl<<minst<<endl; return 0;
}

P2905 [USACO08OPEN]农场危机Crisis on the Farm-dp相关推荐

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

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

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

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

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

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

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

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

  5. 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 ...

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

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

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

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

  8. 2017-2018年度刷题记录

    2018暑假刷题1: T1.CF6A Triangle (#模拟 -1.4) T2.CF59A Word(#模拟 -1.5) T3.[洛谷]P2772 寻找平面上的极大点(#贪心 -1.4) T4.[ ...

  9. 【from zero to zero】noip2017

    from zero to zero 洛谷首页的倒计时不知道什么时候就变成了六字开头. 到底还是太弱了. 生病又拖了很多的时间. 听了很多的算法,自己写起来却非常困难. 也许要在累倒前做一些事情呢. 从 ...

最新文章

  1. jQuery学习笔记一
  2. 第一篇:时间和全局状态
  3. rust怎么把门拿下来_皮肤好的女生都是怎么护肤的?快拿小本本记下来
  4. scala函数的定义语法说明
  5. WGAN的成功,可能跟Wasserstein距离没啥关系
  6. [源码和文档分享]C语言实现的基于Huffman哈夫曼编码的数据压缩与解压缩
  7. 课程设计---图书登记管理系统
  8. 使您的Java 8方法引用生效
  9. asp网站短信api服务器,asp短信接口源码 比较简单但也挺实用用的(两个写法)...
  10. __RESTRICT修改为__RRSTRICT,程序闪退。
  11. 第十章:在Spark集群上掌握比较重要的图操作之Computing Degree
  12. 揭晓AI算力池化的五大场景
  13. 我跟 17 位顶级游戏策划人学到的 3 个产品方法论
  14. git 本地库的使用
  15. Eclipse debug ‘Source not found’
  16. 判断mysql指定数据库指定表是否存在的SQL语句
  17. MATLAB遍历文件夹
  18. pix 506E拨号上网设置
  19. 如何设置计算机休眠播放幻灯片,如何设置电脑休眠屏保幻灯片
  20. 《东周列国志》第一百一回 秦王灭周迁九鼎 廉颇败燕杀二将

热门文章

  1. 删除二叉树节点完整c语言程序以及例子,C语言C++实现二叉树构造与查找删除节点.doc...
  2. SQL:查找某个班级的人数并按班级人数多少进行排列,查找各班年龄最小的女生的班级号,学号,姓名,出生日期并按班级号升序排列
  3. UITT私有化自动跟单系统
  4. 【考研英语-基础-长难句】复合句_定语从句【先行词 关系词】【限定_非限定性定语从句】层层递进关系
  5. while循环练习题-检测输入数据中奇数和偶数的个数
  6. ROS2报错缺少“diagnostic_updater“,CMake did not find diagnostic_updater. 解决思路
  7. C语言实现万年历系统
  8. org.springframework.dao.InvalidDataAccessApiUsageException:The given object has a null identifi的解决方案
  9. 赵小楼《天道》《遥远的救世主》深度解析(65)实事求是的辩证思维(应试教育学不到的思维)
  10. VUE项目中安装和使用vant组件