POJ 2137
水,dp【i】【j】【k】,设为当前为i个牛,在它喜欢的j个位置,而第一个牛在k个位置,很明显了,其实不过是枚举。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <climits>
#include <string.h>
#include <queue>
#include <cmath>
#include <vector>
using namespace std;
struct Point {
int x,y;
Point(int xx,int yy){x=xx,y=yy;}
};
vector<Point>v[110]; int n;
double dp[110][45][45]; double dist(int x,int y,int xx,int yy){
double xt=x-xx; double yt=y-yy;
return sqrt(xt*xt+yt*yt);
} int main(){
int k,x,y;
while(scanf("%d",&n)!=EOF){
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
v[i].clear();
scanf("%d",&k);
for(int p=1;p<=k;p++){
scanf("%d%d",&x,&y);
v[i].push_back(Point(x,y));
}
}
int psz=v[1].size(),psw=v[2].size(),psy;
for(int i=0;i<psz;i++){
for(int k=0;k<psw;k++){
dp[2][k][i]=dist(v[1][i].x,v[1][i].y,v[2][k].x,v[2][k].y);
}
}
for(int i=3;i<=n;i++){
psy=v[i].size(); psw=v[i-1].size();
for(int k=0;k<psz;k++){
for(int p=0;p<psy;p++){
dp[i][p][k]=dist(v[i][p].x,v[i][p].y,v[i-1][0].x,v[i-1][0].y)+dp[i-1][0][k];
for(int t=1;t<psw;t++)
dp[i][p][k]=min(dp[i][p][k],dist(v[i][p].x,v[i][p].y,v[i-1][t].x,v[i-1][t].y)+dp[i-1][t][k]);
}
}
}
double ans=1e10;
psw=v[n].size();
for(int i=0;i<psw;i++){
for(int j=0;j<psz;j++){
ans=min(ans,dp[n][i][j]+dist(v[n][i].x,v[n][i].y,v[1][j].x,v[1][j].y));
}
}
printf("%d\n",int(100*ans));
}
}
POJ 2137的更多相关文章
- POJ 2137 DP
思路: 枚举第一个点集中起点是哪个. 因为第i个点集总和第i-1个点集和第i+1个点集相连. 我们就可以DP求出最优解了. f[i][j]=min(f[i][j],f[i-1][k]+dis(i,j, ...
- poj上的dp专题
更新中... http://poj.org/problem?id=1037 dp[i][j][0]表示序列长度为i,以j开始并且前两位下降的合法序列数目; dp[i][j][1]表示序列长度为i, 以 ...
- POJ 题目分类(转载)
Log 2016-3-21 网上找的POJ分类,来源已经不清楚了.百度能百度到一大把.贴一份在博客上,鞭策自己刷题,不能偷懒!! 初期: 一.基本算法: (1)枚举. (poj1753,poj2965 ...
- (转)POJ题目分类
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- poj分类
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. ( ...
- poj 题目分类(1)
poj 题目分类 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K--0.50K:中短代码:0.51K--1.00K:中等代码量:1.01K--2.00K:长代码:2.01 ...
- POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)
本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...
- POJ题目分类(转)
初期:一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
随机推荐
- luogu1890 gcd区间
题目大意:给定一行n个正整数a[1]..a[n].m次询问,每次询问给定一个区间[L,R],输出a[L]..a[R]的最大公因数. 因为gcd满足交换律和结合律,所以用线段树维护区间上的gcd值即可. ...
- js自定义回调函数
JavaScript允许开发人员像传递任何类型的数据一样传递函数,也就是说,函数也是一种数据类型,通过typeof就知道. 例子1: var CallbackFun = function(){ t ...
- spring属性的三种注入方法
(1)使用set方法: public class Book { private String bookname;public void setBookname(String bookname) { ...
- 0x51 线性DP
数据结构没什么好写的..分块和整体二分还有点分学得很懂..果然我还是比较适合这些东西 poj2279 奇怪题,我的想法就是五维记录最边上的一斜排,会M,结果的的确确是锻炼思维的,正解并不是DP2333 ...
- php 0,null,empty,空,false,字符串关系(转)
在php中由于是弱类型语言,不同类型值之间可以隐式转换,使得false,null,”,0,’0′这几个值的比较有些混乱,现总结一下: //相等判断 '' == NULL == 0 == false ( ...
- xss 记录cookie
<p> <img src="http://act.ci123.com/global/ueditor_new/php/upload/98591403834900.jpg&qu ...
- JAVA 中for-each循环使用方法
for each循环还是第一次见,“java SE 5.0增加了一种功能很强的循环结构,可以用来一次处理数组中的每个元素(其他类型的元素集合亦可)而不必为指定下标值而分心”. 这种增强的for eac ...
- testNG中方法的调用顺序
今天在执行selnium的test case时,总是遇到空指针错误.但是以前也有run成功过,然后换了各种方法定位元素,都失败了,所以怀疑应该不是元素定位不到的问题,所以可能是method之间有依赖, ...
- hiho一下 第173周
题目1 : A Game 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi and Little Ho are playing a game. Ther ...
- RoIPooling与RoIAlign的区别
一.RoIPooling与RoIAlign 1.1.RoIPooling 通过对Faster RCNN的学习我妈了解的RolPooling可以使生成的候选框region proposal映射产生固定大 ...