BZOJ1605 [Usaco2008 Open]Crisis on the Farm 牧场危机
标题好长&&我是权限狗,汪汪!
题没看懂的我以为这是一道极难滴题目。。。然后,然后我就看懂题了。
数据少给了一个条件K <= 30...(没这条件还做个鬼。。。)
f[k, i, j]表示走了k步,x方向移动i,y方向移动j的最大被拯救牛的数量,然后方程就很好写了,略之。
(其实是太烦了,不想写)
真是一道很烦的题目。。。不仅预处理很烦,转移很烦,连输出解也很烦。。。
/**************************************************************
Problem: 1605
User: rausen
Language: C++
Result: Accepted
Time:76 ms
Memory:1644 kb
****************************************************************/ #include <cstdio>
#include <algorithm> #define rep(i, n) for (int (i) = 1; (i) <= (n); ++(i))
using namespace std;
const int dx[] = {, , , , -};
const int dy[] = {, , , -, };
const int inf = (int) 1e9;
const char CHAR[] = {'A', 'W', 'S', 'N', 'E'};
int n, m, K, ans;
int Cx[], Cy[], Hx[], Hy[];
int f[][][], cnt[][];
char step[][][]; int main(){
scanf("%d%d%d", &n, &m, &K);
rep(i, n)
scanf("%d%d", Cx + i, Cy + i);
rep(i, m)
scanf("%d%d", Hx + i, Hy + i);
rep(i, n) rep(j, m){
int Dx = Cx[i] - Hx[j], Dy = Cy[i] - Hy[j];
if (abs(Dx) <= && abs(Dy) <= )
++cnt[ + Dx][ + Dy];
}
for (int k = ; k <= K; ++k)
for (int i = ; i <= ; ++i)
for (int j = ; j <= ; ++j){
f[k][i][j] = -inf;
step[k][i][j] = 'Z';
}
f[][][] = ; rep(k, K) rep(i, ) rep(j, )
f[k][i][j] = cnt[i][j] + max(max(f[k - ][i - ][j], f[k - ][i + ][j]), max(f[k - ][i][j - ], f[k - ][i][j + ]));
ans = ;
rep(i, ) rep(j, )
ans = max(ans, f[K][i][j]);
rep(i, ) rep(j, )
if (f[K][i][j] == ans)
step[K][i][j] = 'A';
for (int k = K - ; k >= ; --k)
rep(i, ) rep(j, ) rep(l, )
if (f[k][i][j] + cnt[i + dx[l]][j + dy[l]] == f[k + ][i + dx[l]][j + dy[l]] && step[k + ][i + dx[l]][j + dy[l]] < 'Z')
step[k][i][j] = CHAR[l]; printf("%d\n", ans);
int i = , j = ;
for (int k = ; k < K; ++k){
printf("%c", step[k][i][j]);
if (step[k][i][j] == 'E') --i; else
if (step[k][i][j] == 'W') ++i; else
if (step[k][i][j] == 'S') ++j; else
if (step[k][i][j] == 'N') --j;
}
printf("\n");
return ;
}
比某些斜率优化还长。。。
BZOJ1605 [Usaco2008 Open]Crisis on the Farm 牧场危机的更多相关文章
- 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就好了. 状态非常好想非 ...
- bzoj1605 / P2905 [USACO08OPEN]农场危机Crisis on the Farm
P2905 [USACO08OPEN]农场危机Crisis on the Farm 发现总步数$k<=30$,考虑用$k$瞎搞 设$f[u][i][j]$表示已经吹$u$次哨,全体奶牛向右走$i ...
- BZOJ1621: [Usaco2008 Open]Roads Around The Farm分岔路口
1621: [Usaco2008 Open]Roads Around The Farm分岔路口 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 521 S ...
- BZOJ 1621: [Usaco2008 Open]Roads Around The Farm分岔路口
题目 1621: [Usaco2008 Open]Roads Around The Farm分岔路口 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 56 ...
- 洛谷P2905 [USACO08OPEN]农场危机Crisis on the Farm
P2905 [USACO08OPEN]农场危机Crisis on the Farm 题目描述 约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆 一堆,共1000)堆.每 ...
- [Usaco2008 Open]Roads Around The Farm分岔路口[水题]
Description 约翰的N(1≤N≤1,000,000,000)只奶牛要出发去探索牧场四周的土地.她们将沿着一条路走,一直走到三岔路口(可以认为所有的路口都是这样的).这时候,这一群奶牛 ...
- 【BZOJ】1621: [Usaco2008 Open]Roads Around The Farm分岔路口(dfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1621 这题用笔推一下就懂了的.... 当2|(n-k)时,才能分,否则不能分. 那么dfs即可.. ...
- 洛谷 P2905 [USACO08OPEN]农场危机Crisis on the Farm
题目描述 约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆 一堆,共1000)堆.每一堆里,30只奶牛一只踩在另一只的背上,叠成一座牛塔.牧场 里还有M(1 < ...
随机推荐
- 20145304 Exp3 免杀原理与实践
20145304 Exp3 免杀原理与实践 基础问题回答 (1)杀软是如何检测出恶意代码的? 检验特征码,包含特征码的代码会被杀软认为是恶意代码,例如一些常用恶意代码加壳后就有一个固定的代码会被认为是 ...
- Python3基础 file with 配合文件操作
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 51NOD 1087 1 10 100 1000
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1087 暴力大法 #include<bits/stdc++.h> ...
- CodeForces 1105E
题目链接 std:meet in the middle 首先把所有的点分成两部分,设\(f_i\)为前半部分在点集\(i\)中选出的最大独立集,\(g\)为在后半部分选.这个可以在\(O(2^{m/2 ...
- [不屈的复习] - http://how2j.cn/
http://how2j.cn/ 该教程网站分得比较规整!
- UVa 116 单向TSP(多段图最短路)
https://cn.vjudge.net/problem/UVA-116 题意:给出m行n列的整数矩阵,从第一列任何一个位置出发每次往右,右上或右下走一格,最终到达最后一列,要求经过的整数之和最小. ...
- python 元组元素反转
#create a tuple x = ("w3resource") # Reversed the tuple y = reversed(x) print(tuple(y)) #c ...
- bugfree 安装配置(Ubuntu16.04 amd 64 Desktop)
上面是我使用的版本! 1.首先搭建 xampp 下载XAMPP:https://www.apachefriends.org/download.html 注意:下载低版本的,不然之后会找不到mysql ...
- C# 二进制字符串互转
1.字符转二进制 public static string ChineseToBinary(string s) { byte[] data = Encoding.Unicode.GetBytes(s) ...
- Qt_QString.indesOf和mid测试
1.indexOf #define GID_PREFIX "dr_" QString str = "dr__awedr4"; int iIdx = str.in ...