【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 ...
随机推荐
- ###《Effective STL》--Chapter5
点击查看Evernote原文. #@author: gr #@date: 2014-09-17 #@email: forgerui@gmail.com Chapter5 算法 Topic 30: 确保 ...
- jquery个人笔记
一.链式操作 <!DOCTYPE html> <html> <head> <title></title> <script src = ...
- 双人五子棋对战(需要EasyX图像库)
实训要做项目呐.天天坐在电脑面前累死了.最近题刷的少.大多数都挺水.就不挨个编辑发上来了.发发白天写的项目吧.可能好几天更一下.实训结束恢复正常. 这个游戏需要EasyX的图像库.有兴趣的可以下一个图 ...
- CSU-ACM2016暑假集训训练2-DFS(C - Network Saboteur)
C - Network Saboteur Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu ...
- hdu 1753 大明A+B(高精度小数加法)
//深刻认识到自己的粗心,为此浪费了一天.. Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是 ...
- iOS数据库操作流程
SQLite最新的版本是3.0,使用之前应该先导入libsqlite3.0.dylib 1.导入流程 2.iOS中操作数据库的流程 打开数据库 准备SQL数据库 执行SQL数据库 语句完结 关闭数据库 ...
- PHP初学留神(四)
这周去听了Google的演讲,从Idea到Code的商业宣传.不过因为是头一次听英文演讲,心里还是很舒服.这周主要做的是Bootstrap前端美化,这个框架也比较好玩.在php上面花的时间相对少了,也 ...
- 关于vs2013 mysql Ef框架中提示版本不兼容问题的解决办法
<runtime> <assemblyBinding> <dependentAssembly> <assemblyIden ...
- ASP.NET 学习小记 -- “迷你”MVC实现(2)
Controller的激活 ASP.NET MVC的URL路由系统通过注册的路由表对HTTO请求进行解析从而得到一个用户封装路由数据的RouteData对象,而这个过程是通过自定义的UrlRoutin ...
- 编译报错GLIBCXX_3.4.15 clock_gettime@@GLIBC_2.2
GLIBCXX_3.4.15 升级gcc,g++编译器 clock_gettime@@GLIBC_2.2 链接库时加-lrt