博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Beta Round #8 C. Looking for Order 状压
阅读量:4679 次
发布时间:2019-06-09

本文共 2489 字,大约阅读时间需要 8 分钟。

C. Looking for Order

题目连接:

Description

Girl Lena likes it when everything is in order, and looks for order everywhere. Once she was getting ready for the University and noticed that the room was in a mess — all the objects from her handbag were thrown about the room. Of course, she wanted to put them back into her handbag. The problem is that the girl cannot carry more than two objects at a time, and cannot move the handbag. Also, if he has taken an object, she cannot put it anywhere except her handbag — her inherent sense of order does not let her do so.

You are given the coordinates of the handbag and the coordinates of the objects in some Сartesian coordinate system. It is known that the girl covers the distance between any two objects in the time equal to the squared length of the segment between the points of the objects. It is also known that initially the coordinates of the girl and the handbag are the same. You are asked to find such an order of actions, that the girl can put all the objects back into her handbag in a minimum time period.

Input

The first line of the input file contains the handbag's coordinates xs, ys. The second line contains number n (1 ≤ n ≤ 24) — the amount of objects the girl has. The following n lines contain the objects' coordinates. All the coordinates do not exceed 100 in absolute value. All the given positions are different. All the numbers are integer.

Output

In the first line output the only number — the minimum time the girl needs to put the objects into her handbag.

In the second line output the possible optimum way for Lena. Each object in the input is described by its index number (from 1 to n), the handbag's point is described by number 0. The path should start and end in the handbag's point. If there are several optimal paths, print any of them.

Sample Input

0 0

2
1 1
-1 1

Sample Output

8

0 1 2 0

Hint

题意

平面上有n个物品,这个小朋友会去拿这些物品,然后拿到返回包的位置。

但是这个小朋友一次最多拿两个物品,问你怎么去拿,才能使得把所有物品都拿到包的位置,且走的距离和最小

题解:

比较显然的状压,状压中有一个剪枝,显然拿的顺序是随意的,我先拿和后拿都是一样的。

所以可以直接return就好了。

代码

#include
using namespace std;const int maxn = 24;int dp[1<
<
next+d[n][i]+d[i][n]) { dp[x]=next+d[n][i]+d[i][n]; pre[x]=x^(1<
next+d[n][i]+d[i][j]+d[j][n]) { dp[x]=next+d[n][i]+d[i][j]+d[j][n]; pre[x]=x^(1<
<

转载于:https://www.cnblogs.com/qscqesze/p/5381331.html

你可能感兴趣的文章
iOS中的图像处理(一)——基础滤镜
查看>>
Java中int类型和tyte[]之间转换及byte[]合并
查看>>
silverlight2 游戏 1 你能坚持多少秒
查看>>
数组元素java集合源代码分析(一)
查看>>
一边学习一边爱着梦着一边生活
查看>>
线性结构与非线性结构
查看>>
ID:12031 全排列
查看>>
SpringMVC注解版前台向后台传值的两种方式(IDEA)
查看>>
从Google Earth 中下载三维模型
查看>>
java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition的解决方案
查看>>
柔性数组(用于结构体)
查看>>
讲解下for循环的用法,加深记忆
查看>>
使用Spring.Net
查看>>
002-BootStrap基本模板
查看>>
HttpClient使用详细教程
查看>>
Python黑科技:赋值技巧
查看>>
mybatis insert前获取要插入的值
查看>>
OGRE 入门 一、 ubuntu 12.04 下编译
查看>>
MySQL按照汉字的拼音排序
查看>>
3.1.3自适应阈值化
查看>>