POJ 2137 DP
思路:
枚举第一个点集中起点是哪个。 因为第i个点集总和第i-1个点集和第i+1个点集相连。 我们就可以DP求出最优解了。
f[i][j]=min(f[i][j],f[i-1][k]+dis(i,j,i-1,k));
// by SiriusRen
#include <cmath>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,num[105];
double f[105][44],ans=0x3ffffff;
struct Point{int x,y;}point[105][44];
double dis(int x1,int y1,int x2,int y2){
double tempx=1.0*(point[x1][y1].x-point[x2][y2].x)*(point[x1][y1].x-point[x2][y2].x);
double tempy=1.0*(point[x1][y1].y-point[x2][y2].y)*(point[x1][y1].y-point[x2][y2].y);
return sqrt(tempx+tempy);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&num[i]);
for(int j=1;j<=num[i];j++)
scanf("%d%d",&point[i][j].x,&point[i][j].y);
}
for(int l=1;l<=num[1];l++){
for(int i=1;i<=n;i++)
for(int j=1;j<=num[i];j++)
f[i][j]=0x3ffffff;
f[1][l]=0;
for(int i=2;i<=n;i++)
for(int j=1;j<=num[i];j++)
for(int k=1;k<=num[i-1];k++)
f[i][j]=min(f[i][j],f[i-1][k]+dis(i,j,i-1,k));
for(int i=1;i<=num[n];i++)
ans=min(ans,f[n][i]+dis(n,i,1,l));
}
printf("%d\n",int(ans*100));
}
POJ 2137 DP的更多相关文章
- hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)
题目 以前做过的一道题, 今天又加了一种方法 整理了一下..... 题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符. 方法一: 将该字符串与其反转求一次LCS,然后所求就是n减去 ...
- poj 1080 dp如同LCS问题
题目链接:http://poj.org/problem?id=1080 #include<cstdio> #include<cstring> #include<algor ...
- poj 1609 dp
题目链接:http://poj.org/problem?id=1609 #include <cstdio> #include <cstring> #include <io ...
- POJ 1037 DP
题目链接: http://poj.org/problem?id=1037 分析: 很有分量的一道DP题!!! (参考于:http://blog.csdn.net/sj13051180/article/ ...
- Jury Compromise POJ - 1015 dp (标答有误)背包思想
题意:从 n个人里面找到m个人 每个人有两个值 d p 满足在abs(sum(d)-sum(p)) 最小的前提下sum(d)+sum(p)最大 思路:dp[i][j] i个人中 和 ...
- poj 1485 dp
转自:http://www.cnblogs.com/kuangbin/archive/2011/11/12/2246407.html [题目大意] 一条公路上有n个旅馆,选出其中k个设置仓库,一个仓库 ...
- POJ 3017 DP + 单调队列 + 堆
题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少.dp转移 ...
- POJ 1661 DP
Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11071 Accepted: 3607 Descr ...
- POJ 1160 DP
题目: poj 1160 题意: 给你n个村庄和它的坐标,现在要在其中一些村庄建m个邮局,想要村庄到最近的邮局距离之和最近. 分析: 这道题.很经典的dp dp[i][j]表示建第i个邮局,覆盖到第j ...
随机推荐
- 前端-Angular思维导图笔记
看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记
- jQuery操作样式知识总结
css操作 功能:设置或者修改样式,操作的是style属性. 设置单个样式 //name:需要设置的样式名称 //value:对应的样式值 css(name, value); //使用案例 $(&qu ...
- 使用jQuery对图片进行居中设置
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 9) 十分钟学会android--使用Fragment建立动态UI
为了在 Android 上为用户提供动态的.多窗口的交互体验,需要将 UI 组件和 Activity 操作封装成模块进行使用,这样我们就可以在 Activity 中对这些模块进行切入切出操作.可以用 ...
- 有关Gradle Network is unreachable: connect的报错
项目Gradle Errer:Network is unreachable: connect 同时还有as的 报错 Internal HTTP server disabled: Cannot st ...
- 添加图标:before 和 :after css中用法
#sTitle:after{ position: absolute; top: 2px; font-family: "FontAwesome"; content: "\f ...
- jquery的语法
$(this).hide() - 隐藏当前元素 $("p").hide() - 隐藏所有段落 $(".test").hide() - 隐藏所有 class=&q ...
- nginx 自动填充index.php
if (!-e $request_filename) { rewrite ^/(.+?\.php)/?(.*)$ /$/$ last; rewrite ^/(.*)$ /index.php/$ las ...
- HDU1079-Calendar Game 简单思维博弈··
题意:给你1990,1.1----2001.11.4范围内的某一天,格式year month day 两人轮流操作: 1. day+1; 2.month + 1: 谁先达到2001.11.4号,谁获 ...
- 【Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2) D】The Wu
[链接] 我是链接,点我呀:) [题意] 给你n个字符串放在multiset中. 这些字符串都是长度为m的01串. 然后给你q个询问 s,k 问你set中存在多少个字符串t 使得∑(t[i]==s[i ...