【Codeforces】CF 8 C Looking for Order(状压dp)
题目
传送门:QWQ
分析
这种题不会做 吃枣药丸。。。。。
想到状压已经经过的点。
然后更新时枚举两个点加进去。
复杂度$ {O(2^n \times n^2)}$。
凉凉。
真正的做法是每一个状态只要找到一组解就break。这样可以省掉一层n。
大致上就像lrj紫书的dp例题一样,反正这个点都要选,那就先选了他。
还不是很懂这个神奇的break。。。。。
代码
#include <bits/stdc++.h>
using namespace std;
const int maxn=, INF=1e9; int dp[<<maxn], dis[maxn][maxn], pre[<<maxn];
int x[maxn], y[maxn]; int sqr(int x){ return x*x; } int main(){
scanf("%d%d",&x[],&y[]);
int n; scanf("%d",&n);
for(int i=;i<=n;i++) {
scanf("%d%d",&x[i],&y[i]);
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
dis[i][j]=dis[j][i]=sqr(x[i]-x[j])+sqr(y[i]-y[j]);
}
} memset(dp,,sizeof(dp)); dp[]=;
for(int S=;S<(<<n);S++){
if(dp[S]>INF) continue;
for(int i=;i<=n;i++){
if(S&(<<i-)) continue;
for(int j=;j<=n;j++){
if(S&(<<j-)) continue; int prenum=dp[S|<<(i-)|<<(j-)];
dp[S|<<(i-)|<<(j-)]=min(dp[S|<<(i-)|<<(j-)], dp[S]+dis[][i]+dis[][j]+dis[i][j]);
if(prenum>dp[S|<<(i-)|<<(j-)]){
pre[S|<<(i-)|<<(j-)]=S;
}
}
break;
}
} printf("%d\n",dp[(<<n)-]);
int now=(<<n)-; //从所有都齐的状态开始逆推
while ( now!= )
{
printf( "0 " );
int update=now^pre[now];
for ( int i=; i<=n; i++ )
if ( update&<<i- )
printf( "%d ", i ); //输出本次拿的哪些物品
now=pre[now];
}
puts("");
}
【Codeforces】CF 8 C Looking for Order(状压dp)的更多相关文章
- Codeforces Beta Round #8 C. Looking for Order 状压dp
题目链接: http://codeforces.com/problemset/problem/8/C C. Looking for Order time limit per test:4 second ...
- codeforces 8C. Looking for Order 状压dp
题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include < ...
- 【题解】codeforces 8c Looking for Order 状压dp
题目描述 Lena喜欢秩序井然的生活.一天,她要去上大学了.突然,她发现整个房间乱糟糟的--她的手提包里的物品都散落在了地上.她想把所有的物品都放回她的手提包.但是,这里有一点问题:她一次最多只能拿两 ...
- Codeforces Gym 100610 Problem K. Kitchen Robot 状压DP
Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10061 ...
- Educational Codeforces Round 13 E. Another Sith Tournament 状压dp
E. Another Sith Tournament 题目连接: http://www.codeforces.com/contest/678/problem/E Description The rul ...
- Codeforces 1225G - To Make 1(bitset+状压 dp+找性质)
Codeforces 题目传送门 & 洛谷题目传送门 还是做题做太少了啊--碰到这种题一点感觉都没有-- 首先我们来证明一件事情,那就是存在一种合并方式 \(\Leftrightarrow\) ...
- CF1103D Codeforces Round #534 (Div. 1) Professional layer 状压 DP
题目传送门 https://codeforces.com/contest/1103/problem/D 题解 失去信仰的低水平选手的看题解的心路历程. 一开始看题目以为是选出一些数,每个数可以除掉一个 ...
- 【Codeforces】CF 165 E Compatible Numbers(状压dp)
题目 传送门:QWQ 分析 很难想到方向,但有方向了就很easy了. 我们如何减少不必要的计算? 如果我们知道了$ 100111 $的相容的数,$ 100101 $的相容数和他是完全一样的. 我们就靠 ...
- Codeforces 279D The Minimum Number of Variables 状压dp
The Minimum Number of Variables 我们定义dp[ i ][ mask ]表示是否存在 处理完前 i 个a, b中存者 a存在的状态是mask 的情况. 然后用sosdp处 ...
- codeforces#580 D. Kefa and Dishes(状压dp)
题意:有n个菜,每个菜有个兴奋值,并且如果吃饭第i个菜立即吃第j个菜,那么兴奋值加ma[i][j],求吃m个菜的最大兴奋值,(n<=18) 分析:定义dp[status][last],statu ...
随机推荐
- Linux tomcat自动启动
1.编辑/etc/rc.d/rc.local 添加环境变量 例如: JAVA_HOME=/usr/local/java/JRE_HOME=/usr/local/java/jreCLASS_PATH=. ...
- 接下来将介绍C#如何设置子窗体在主窗体中居中显示,本文提供详细的操作步骤,需要的朋友可以参考下
接下来将介绍C#如何设置子窗体在主窗体中居中显示,本文提供详细的操作步骤,需要的朋友可以参考下 其实表面上看是很简单的 开始吧,现在有两个窗体Form1主窗体,Form2子窗体 而且我相信大部分人都会 ...
- Python mode_w
# 每次使用w模式打开文件, 都会清空这个文件(坑) f = open("胡辣汤",mode="w",encoding="utf-8") f ...
- fopen & fcolse & fseek & ftell & fstat 文件操作函数测试
1.文件大小查询file_size.c 方法一:fseek + ftell: 方法二:ftell #include <stdio.h> #include <fcntl.h> # ...
- iOS 证书 设置指南
点击这里跳转到改链接:http://docs.jpush.cn/pages/viewpage.action?pageId=1343727
- linux C/C++服务器后台开发面试题总结
一.编程语言 1.根据熟悉的语言,谈谈两种语言的区别? 主要浅谈下C/C++和PHP语言的区别: 1)PHP弱类型语言,一种脚本语言,对数据的类型不要求过多,较多的应用于Web应用开发,现在好多互联网 ...
- I.MX6_Linux_UART_device&driver_hacking
/****************************************************************************************** * I.MX6_ ...
- [转载]redis持久化的两种操作RDB和AOF
Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AO ...
- 杭电OJ1789、南阳OJ236(贪心法)解题报告
杭电OJ1789http://acm.hdu.edu.cn/showproblem.php?pid=1789 南阳OJ236http://59.69.128.203/JudgeOnline/probl ...
- 转 AngularJS 2.0将面向移动应用并放弃旧浏览器
AngularJS团队表示“AngularJS 2.0是移动应用的框架”.该框架将继续支持桌面,但其主要关注点变成了移动领域.它的目标还包括通过转译器支持EcmaScript 6(因为浏览器还不支持E ...