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));
	}
}

  

时间: 2024-10-26 15:04:25

POJ 2137的相关文章

POJ 2137 Cowties 线性DP

题意:n只牛,第i只牛有Si个合法的坐标(x,y),当n只牛都在它合法的坐标上时,花费为相邻两个点的距离和的累加和(1->2,..n->1).n<=100,si<=40,问最小的花费? 第i只牛,有num[i]种决策 设dp[i][p][j] 前i个人,第1个人在p 最后一个人在j(不连成环)的最小花费最后ans连成环时需要第一个人的状态.(或者枚举起点)按照最后一个人已经前一个人的位置转移状态即可 O(100*40*40*40=6e6) #include <iostream

ACM训练方案-POJ题目分类

ACM训练方案-POJ题目分类 博客分类: 算法 ACM online Judge 中国: 浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 杭州电子科技大学(HDU):http://acm.hdu.edu.cn/ 中国科技大学(USTC):http://acm.ustc.edu.cn/ 北京航天航空大学(BUAA)http://acm.buaa.edu.cn/oj/index.php 南京

转载:poj题目分类(侵删)

转载:from: POJ:http://blog.csdn.net/qq_28236309/article/details/47818407 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K–0.50K:中短代码:0.51K–1.00K:中等代码量:1.01K–2.00K:长代码:2.01K以上. 短:1147.1163.1922.2211.2215.2229.2232.2234.2242.2245.2262.2301.2309.2313.2334.2346.2348

poj题库分类

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

[欧拉回路] poj 1300 Door Man

题目链接: http://poj.org/problem?id=1300 Door Man Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2137   Accepted: 857 Description You are a butler in a large mansion. This mansion has so many rooms that they are merely referred to by number

POJ题目(转)

http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (

Poj 题目分类

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

POJ题目分类(转)

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

北大POJ题库使用指南

原文地址:北大POJ题库使用指南 北大ACM题分类主流算法: 1.搜索 //回溯 2.DP(动态规划)//记忆化搜索 3.贪心 4.图论 //最短路径.最小生成树.网络流 5.数论 //组合数学(排列组合).递推关系.质因数法 6.计算几何 //凸壳.同等安置矩形的并的面积与周长.凸包计算问题 8.模拟 9.数据结构 //并查集.堆.树形结构 10.博弈论 11.CD有正气法题目分类: 1. 排序 1423, 1694, 1723, 1727, 1763, 1788, 1828, 1838, 1