【POJ】1054 The Troublesome Frog
题目是非常经典的搜索+剪枝。题意简言之就是,青蛙需要沿着直线踩着踏点通过田地,并且踏点需要至少为3。问哪条路径青蛙踩坏的作物最多。很好的一个条件是青蛙每次移动都是等间距的。题目需要注意将其排序。
#include <iostream>
using namespace std; #define MAXNUM 5005 typedef struct {
int x, y;
} point_st; point_st points[MAXNUM];
bool Fields[MAXNUM][MAXNUM];
int r, c, n; int comp(const void *a, const void *b) {
point_st *p1 = (point_st *)a;
point_st *p2 = (point_st *)b;
if (p1->x != p2->x)
return p1->x - p2->x;
else
return p1->y - p2->y;
} int calPath(int p1, int p2) {
int x1 = points[p1].x, y1 = points[p1].y;
int x2 = points[p2].x, y2 = points[p2].y;
int nx, ny, cnt = ; while () {
nx = *x2 - x1;
ny = *y2 - y1;
if (nx> && nx<=r && ny> && ny<=c) { // 保持在田地范围内
if (Fields[nx][ny]) {
cnt++;
x1 = x2; y1 = y2;
x2 = nx; y2 = ny;
} else {
return ; // 前面没有踏点了,即此路不通
}
} else {
if (cnt >= )
return cnt;
else
return ; // 踏点不足3,不符合题意
}
}
} int main() {
int i, j, k;
int a, b; while (cin >>r>>c) {
cin >>n; memset(Fields, false, sizeof(Fields)); for (i=; i<n; ++i) {
cin >>points[i].x>>points[i].y;
Fields[points[i].x][points[i].y] = true;
} qsort(points, n, sizeof(point_st), comp);
int sum = ; for (i=; i<n; ++i) {
for (j=i+; j<n; ++j) {
int dx = points[j].x - points[i].x;
if (dx> && ((r-points[i].x)/dx) < sum) // 剪枝1,当前的可移动点数大于sum(sum为当前最大值)
continue;
int dy = points[j].y - points[i].y;
a = points[i].x - dx;
b = points[i].y - dy;
if (a> && a<=r && b> && b<=c) // 剪枝2,该点的前趋点仍然在图中,则证明points[i]点不能作为初始点
continue;
k = calPath(i, j); if (k > sum)
sum = k;
}
} cout <<sum<<endl;
} return ;
}
【POJ】1054 The Troublesome Frog的更多相关文章
- 【POJ】1704 Georgia and Bob(Staircase Nim)
Description Georgia and Bob decide to play a self-invented game. They draw a row of grids on paper, ...
- 【POJ】1067 取石子游戏(博弈论)
Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...
- POJ 1054 The Troublesome Frog
The Troublesome Frog Time Limit: 5000MS Memory Limit: 100000K Total Submissions: 9581 Accepted: 2883 ...
- 【BZOJ】【1986】【USACO 2004 Dec】/【POJ】【2373】划区灌溉
DP/单调队列优化 首先不考虑奶牛的喜欢区间,dp方程当然是比较显然的:$ f[i]=min(f[k])+1,i-2*b \leq k \leq i-2*a $ 当然这里的$i$和$k$都是偶数啦~ ...
- 【POJ】【2104】区间第K大
可持久化线段树 可持久化线段树是一种神奇的数据结构,它跟我们原来常用的线段树不同,它每次更新是不更改原来数据的,而是新开节点,维护它的历史版本,实现“可持久化”.(当然视情况也会有需要修改的时候) 可 ...
- 【POJ】1222 EXTENDED LIGHTS OUT
[算法]高斯消元 [题解] 高斯消元经典题型:异或方程组 poj 1222 高斯消元详解 异或相当于相加后mod2 异或方程组就是把加减消元全部改为异或. 异或性质:00 11为假,01 10为真.与 ...
- 【POJ】2892 Tunnel Warfare
[算法]平衡树(treap) [题解]treap知识见数据结构 在POJ把语言从G++换成C++就过了……??? #include<cstdio> #include<algorith ...
- 【POJ】【1637】Sightseeing tour
网络流/最大流 愚人节快乐XD 这题是给一个混合图(既有有向边又有无向边),让你判断是否有欧拉回路…… 我们知道如果一个[连通]图中每个节点都满足[入度=出度]那么就一定有欧拉回路…… 那么每条边都可 ...
- 【poj】1001
[题目] ExponentiationTime Limit: 500MS Memory Limit: 10000KTotal Submissions: 123707 Accepted: 30202De ...
随机推荐
- ORA-22275: invalid LOB locator specified
性能测试20行和20000行的出现错误 20行的字符没有问题,两万行的出行问题如下 [2014-02-11 09:21:03.343665][17694862] Level 0 cicmpub.C: ...
- Eclipse启动报错Java was started but returned exit code=13
启动Eclipse的时候报错Java was started but returned exit code=13,这个错误的原因是由于eclipse版本与jdk版本不符导致的,可能你的eclipse是 ...
- zookeeper_笔记
Zookeeper:(没看懂) http://cailin.iteye.com/blog/2014486/ http://agapple.iteye.com/blog/1184023 http://b ...
- 网站重构-你了解AJAX吗?
AJAX是时下最流行的一种WEB端开发技术,而你真正了解它的一些特性吗?--IT北北报 XMLHTTPRequest(XHR)是目前最常用的技术,它允许异步接收和发送数据,所有的主流浏览器都对它有不错 ...
- 51nod贪心算法入门-----活动安排问题
有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动? 输入 第1行:1个数N,线段的数量(2 <= N <= 10000) 第2 ...
- putty实现自动登录的方法(ssh和ssh2)
介绍putty实现自动登录的方法. 1.登录主机并输入ssh-keygen -t rsa 提示Enter file in which to save the key (/root/.ssh/id ...
- Python subprocess模块学习总结
从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn*.os.popen*.popen2.*.comman ...
- 【pyhton】【转】修改递归次数
import sys sys.setrecursionlimit(1500) # set the maximum depth as 1500 def recursion(n): if(n <= ...
- python 生成排列、组合以及选择
from <python cookbook> 19.15 任务 需要对一个序列的排列(permutation).组合(combination)或选择(selection)进行迭代操作.即使 ...
- asp.net mvc 事务处理:Transactions
1.在控制器里引用using System.Transactions; 2.在你需要事务回滚的地方外面套一层using (TransactionScope sc = new TransactionSc ...