【codevs2495】 水叮当的舞步
http://codevs.cn/problem/2495/ (题目链接)
题意
给出一个N*N的矩阵,其中元素有5种颜色,每次可以将左上角元素所在的连通块更换一种颜色,连通块指相邻并且颜色相同的元素在同一连通块内。问最少改变几次颜色使得所有元素颜色相同。
Solution
刚开始打了个迭代加深,get了20分。。。考虑如何对它进行优化。
一个很显然的优化就是染色的时候,只对连通块周围的属于连通块的一圈元素进行扩展,并保存下染色后新的外圈元素。
可是仅仅这样还是不够,只能get50分。
考虑A*,如何构造估价函数呢。显然,如果剩下的不属于连通块的元素有cnt种不同的颜色,那么至少还需要染色cnt次,那么如果cnt+当前步数>枚举深度d,显然这样走下去不会出答案,直接退出即可。
细节
细节有点恶心,刚开始我用的bfs实现染色操作,然后回溯还有各种不好做的操作,就直接翻了题解。。真是很优美。。
代码
// codevs2495
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf 2147483640
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; int xx[4]={0,0,-1,1};
int yy[4]={1,-1,0,0};
int a[10][10],vis[10][10],e[6];
int n,flag,d; void color(int x,int y,int col) {
vis[x][y]=1;
for (int i=0;i<4;i++) {
int nx=x+xx[i],ny=y+yy[i];
if (nx<1 || nx>n || ny<1 || ny>n || vis[nx][ny]==1) continue;
vis[nx][ny]=2;
if (a[nx][ny]==col) color(nx,ny,col);
}
}
int eva(int s) {
int cnt=0;
memset(e,0,sizeof(e));
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (vis[i][j]!=1 && !e[a[i][j]]) e[a[i][j]]=1,cnt++;
return cnt;
}
bool judge(int col) {
int tmp=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) if (a[i][j]==col && vis[i][j]==2) {
tmp++;
color(i,j,col);
}
return tmp>0;
}
void search(int s) {
int tmp=eva(s),t[10][10];
if (tmp==0) {flag=1;return;}
else if (tmp+s>d) return;
for (int i=0;i<=5;i++) {
memcpy(t,vis,sizeof(t));
if (judge(i)) search(s+1);
memcpy(vis,t,sizeof(vis));
if (flag) return;
}
}
int main() {
while (scanf("%d",&n)!=EOF && n) {
flag=0;memset(vis,0,sizeof(vis));
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++) scanf("%d",&a[i][j]);
color(1,1,a[1][1]);
for (d=0;d>=0;d++) {
search(0);
if (flag) {printf("%d\n",d);break;}
}
}
return 0;
}
【codevs2495】 水叮当的舞步的更多相关文章
- [codevs2495]水叮当的舞步
[codevs2495]水叮当的舞步 试题描述 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈 ...
- codevs2495 水叮当的舞步 IDA*
我打暴力不对,于是就看看题解,,,,,,IDA*就是限制搜索深度而已,这句话给那些会A*但不知道IDA*是什么玩意的小朋友 看题解请点击这里 上方题解没看懂的看看这:把左上角的一团相同颜色的范围,那个 ...
- codevs 2495 水叮当的舞步
题目链接:水叮当的舞步 我现在开始发题目链接了(主要还是因为懒得整理题面)-- 这道题一开始是看到MashiroSky在写,于是我也开始写这道题了(说白了就是狙击他)-- 这道题看到这么小的范围当然给 ...
- 【IDA*】codevs 2495:水叮当的舞步
2495 水叮当的舞步 题目描述 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上 ...
- bzoj 3041: 水叮当的舞步 迭代加深搜索 && NOIP RP++
3041: 水叮当的舞步 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 72 Solved: 44[Submit][Status] Descript ...
- 【BZOJ3041】水叮当的舞步 迭代深搜IDA*
[BZOJ3041]水叮当的舞步 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变.为了讨好她的偶像虹猫,水叮当决定在地毯上跳 ...
- bzoj3041 水叮当的舞步 IDA*
水叮当的舞步 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 230 Solved: 107[Submit][Status][Discuss] Des ...
- BZOJ 3041 水叮当的舞步
3041: 水叮当的舞步 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 120 Solved: 67[Submit][Status][Discuss ...
- 【codevs2495】水叮当的舞步
题目描述 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变.为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ ...
- Bzoj3041 水叮当的舞步
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 132 Solved: 75 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物 ...
随机推荐
- RelativeLayout的位置属性总结
使用"@id/…"时,所写的id必须在上文中已经定义,不能使用在下文定义的id RelativeLayout的子控件属性总结—— 按照控件之间常规的上下左右依次排列:(指定控件ID ...
- 虚拟机VMWARE上ORACLE License 的计算
Oracle License的计算有两种方式:按照用户数和CPU个数. 其中按CPU计算方式如下: License Number = The Number of CPU Cores * Core ...
- MyEclipse中没有自动提示如何设置
步骤: window->Preferences->Java->Editor->Content Assist->Advanced 将该页面上的所有的未打上勾的选项都勾上就可 ...
- 【转】理解Java Integer的缓存策略
本文将介绍 Java 中 Integer 缓存的相关知识.这是 Java 5 中引入的一个有助于节省内存.提高性能的特性.首先看一个使用 Integer 的示例代码,展示了 Integer 的缓存行为 ...
- SCCM 2012 R2安装部署过程和问题(三)
上篇 SCCM 2012 R2安装部署过程和问题(二) 个人认为对于使用SCCM 2012的最重要的经验是耐心. SCCM采用分布式部署的架构,不同的站点角色可以部署在不同的服务器上,站点角色之间的通 ...
- node.js自动化测试断言包assert的方法说明
参考以下文档 http://yijiebuyi.com/blog/ca2c0edf447624bd4d527490c9fce369.html http://www.cnblogs.com/softlo ...
- 深入java集合系列文章
搞懂java的相关集合实现原理,对技术上有很大的提高,网上有一系列文章对java中的集合做了深入的分析, 先转载记录下 深入Java集合学习系列 Java 集合系列目录(Category) HashM ...
- html中的meta详解
1 name=viewport <meta name="viewport" content="width=device-width,initial-scale=1 ...
- 强制浏览器使用兼容模式,Web.config,httpProtocol
对于一些政府类的网站,很多支持IE6~8,而不支持使用更高版本浏览器浏览.虽然有些浏览器会自动使用兼容模式,或有些人会手动调整浏览器的兼容模式,但不是每一个人.每一款浏览器都可以做到用兼容模式.所以, ...
- oh-my-zsh主题
什么是ZSH Zsh和bash一样,是一种Unix shell,但大多数Linux发行版本都默认使用bash shell.但Zsh有强大的自动补全参数.文件名.等功能和强大的自定义配置功能. 一.安装 ...