hihocoder #1170 机器人 && 编程之美2015复赛
题意:
描写叙述
小冰的N个机器人兄弟排成一列,每一个机器人有一个颜色。
如今小冰想让同一颜色的机器人聚在一起。即随意两个同颜色的机器人之间没有其它颜色的的机器人。
如果随意相邻的两个机器人能够交换位置。请问最少须要多少次交换?
输入
第一行为一个整数T。为数据组数,之后每组数据两行。
第一行为N和K,表示机器人的个数与颜色的总数。
接下来一行N个数,第i个数表示第i个机器人的颜色,取值范围为1到K。
输出
对于每组数据输出一行,形如"Case #X: Y"。X为数据组数,从1開始。Y为最少的交换步数。
数据范围
1 ≤ T ≤ 20
1 ≤ N ≤ 105
小数据
1 ≤ K ≤ 3
大数据
1 ≤ K ≤ 16
题解:
1.状态压缩dp,dp[11001]表示1,2,5这三种机器人已经达到要求(而且1,2,5排在3,4号机器人的前面)所须要的最
少步数
2.举个样例说明:1,2,3,4,5这五种机器人。当dp[10001]转移到dp[11001]。要想让2号达到要求。而且已知1,5号机器人
已经达到要求,就须要让2,3。4号机器人通过交换位置使得,2号机器人排在一起,且处于3。4号机器人的前边
3.达到这个目标。须要知道:逆序数对==通过交换最少的次数达到'有序'
4.预处理i号机器人(范围[1,k])到j号机器人(范围[1,k])所产生的逆序对数pre[i][j]
5.最后达到3的目标。pre[2][3] + pre[2][4]就是将2号机器人换到3,4号机器人前方所须要的步数
总结:
1.開始想用贪心写。写完之后才发现错了
2.看到网上说状态压缩,事实上就是暴力,想了好多天依然没有想出来
3.看到逆序对数==最少交换步数才差点儿相同想出来怎么做的
4.感觉还须要努力。加强全面思考问题的能力
5.近期在学习图像处理,opencv,进度太慢被老师说了,须要提高工作效率!
6.项目这样的事情还是要快。快,快,不能像ACM享受慢慢思考并弄懂问题的快乐。也可能与平时效率低下不愿面对自
己的问题有关
7.总之,不同的科目有不同的学习方法,可是无论什么都须要提高效率。而且都要弄懂原理
8.不纠结于细节,高速找到自己须要学习的目标。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
typedef long long LL;
#define MAXN 100005
#define INF 0x3f3f3f3f3f3f3f3f
#define MAXM 16
#define MAXP 65536
int n,m,pre[MAXM][MAXM];
LL dp[MAXP];
vector<int>vec[MAXM];
int main()
{
int _,cur;
for(int kcas = scanf("%d",&_);kcas <= _;kcas++)
{
scanf("%d%d",&n,&m);
for(int i = 0;i < m;i++)vec[i].clear();
for(int i = 0;i < n;i++)
{
scanf("%d",&cur);
vec[cur - 1].push_back(i);
}
memset(pre,0,sizeof(pre));
for(int i = 0;i < m;i++)
for(int j = 0;j < m;j++)if(i != j)
for(int u = 0,v = 0;u < vec[i].size();u++)
{
while(v < vec[j].size() && vec[i][u] > vec[j][v])
v++;
pre[i][j] += v;
}
memset(dp,0x3f,sizeof(dp));
dp[0] = 0;
int cnt = 1 << m;
for(int i = 0;i < cnt;i++)
{
for(int j = 0;j < m;j++)if(!(i >> j & 1))
{
LL num = 0;
for(int k = 0;k < m;k++)if(!(i >> k & 1) && k != j)
num += pre[j][k];
dp[i | (1 << j)] = min(dp[i | (1 << j)],dp[i] + num);
}
}
printf("Case #%d: %lld\n",kcas,dp[(1 << m) - 1]);
}
}
hihocoder #1170 机器人 && 编程之美2015复赛的更多相关文章
- hihocoder 微软编程之美2015 初赛 第二场(暴力+字典序+图论+思维算法)
题目1 : 扑克牌 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 一副不含王的扑克牌由52张牌组成,由红桃.黑桃.梅花.方块4组牌组成,每组13张不同的面值.现在给定52 ...
- 编程之美2015初赛第一场 hihoCoder #1156 : 彩色的树(染色问题)
#1156 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, , …, n.树中有n - 1条边,任意两个节点间恰好有一条 ...
- 编程之美2015 资格赛 hihocoder 题目2: 回文字符序列
思路:暴力搜,用BFS的方式,生成每一种可能,再对每一种可能进行判断是否回文,进行统计.严重超时!计算一个25个字符的,大概要20多秒! #include <iostream> #incl ...
- hihocoder 微软编程之美2015 初赛 第一场 (树算法 + 暴力思想 + 搜索思想)
题目1 : 彩色的树 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定一棵n个节点的树,节点编号为1, 2, …, n.树中有n - 1条边,任意两个节点间恰好有一条路 ...
- 编程之美2015资格赛 题目2 : 回文字符序列 [ 区间dp ]
传送门 题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串ab ...
- 2017“编程之美”终章:AI之战勇者为王
编者按:8月15日,第六届微软“编程之美”挑战赛在选手的火热比拼中圆满落下帷幕.“编程之美”挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起,微软每年都在革新比赛命题.紧跟时代潮流, ...
- 编程之美2014挑战赛 复赛 Codehunt平台试题答案
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- LeetCode:Climbing Stairs(编程之美2.9-斐波那契数列)
题目链接 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either c ...
- 编程之美2.5:寻找最大的K个数
编程之美2.5:寻找最大的K个数 引申:寻找第k大的数: 方法一: // 选择第k大的数(通过改进快速排序来实现) public static void SelectShort(int[] array ...
随机推荐
- 微信小程序Http高级封装 es6 promise
公司突然要开放微信小程序,持续蒙蔽的我还不知道小程序是个什么玩意. 于是上网查了一下,就开始着手开发..... 首先开发客户端的东西,都有个共同点,那就是 数据请求! 看了下小程序的请求方式大概和a ...
- 【LOJ】#2531. 「CQOI2018」破解 D-H 协议
题解 BSGS直接解出a和b来即可 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii p ...
- 如何利用JMeter模拟超过 5 万的并发用户
本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情. 你可以在本文的结尾部分看到讨论的记录. 快速的步骤概要 编写你的脚本 使用JMeter进行本地测试 BlazeMeter沙箱测 ...
- JAVA 图形开发之计算器设计(事件监听机制)
/*文章中用到的代码只是一部分,需要源码的可通过邮箱联系我 1978702969@qq.com*/ 前段时间刚帮同学用MFC写了个计算器,现在学到JAVA的图形开发,就试着水了一个计算器出来.(可以说 ...
- 开发自己的山寨Android注解框架
目录 开发自己的山寨Android注解框架 开发自己的山寨Android注解框架 参考 Github黄油刀 Overview 在上一章我们学习了Java的注解(Annotation),但是我想大家可能 ...
- webview知多少?
原生页面不会用到webview,html页面内嵌APP,才会用到webview. 一.什么是webview?WebView是手机中内置了一款高性能 webkit 内核浏览器,在 SDK 中封装的一个组 ...
- windows镜像
定制化windows镜像中遇到空格的一些系统目录可以用下面的方式处理 Description Windows XP Directory Windows 7/Vista Directory Enviro ...
- LOJ.2721.[NOI2018]屠龙勇士(扩展CRT 扩展欧几里得)
题目链接 LOJ 洛谷 rank前3无压力(话说rank1特判打表有意思么) \(x*atk[i] - y*p[i] = hp[i]\) 对于每条龙可以求一个满足条件的\(x_0\),然后得到其通解\ ...
- 深入理解指针—>结构体里的成员数组和指针
单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...
- Spring_Spring@Transactional
Spring事务的传播行为 在service类前加上@Transactional,声明这个service所有方法需要事务管理.每一个业务方法开始时都会打开一个事务. Spring默认情况下会对运行期例 ...