【NOIP2013模拟】水叮当的舞步

原创 2016年05月30日 19:25:13

Description

给出一个N*N的网格,每个格子有它的颜色0~5。
每一次你可以选择一个颜色,然后把左上角的格子所在的联通块里的所有格子变成选择的那种颜色。这里的联通是指两个格子有公共边,并且颜色相同。
现在想问,最少需要多少次操作,才会使所有格子的颜色相同。
N<=8,数据组数<=20

Solution

玄学暴力题,各种无脑优化。
考虑到答案不会特别大,可以使用迭代加深。
设一个估价函数(高大上),表示最少还需要的步数,如果当前深度+估价函数>限制就退出。
复杂度玄学,O(跑得过),对于这类题,Czy大神有话要说

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define N 9
using namespace std;
int v[N][N],rev[N][N],a[N][N],id,n;
int g[4][2]={0,1,0,-1,1,0,-1,0};
void fill(int x,int y,int c) {
    v[x][y]=1;
    fo(i,0,3) {
        int xx=x+g[i][0],yy=y+g[i][1];
        if (xx>n||xx<1||yy>n||yy<1||v[xx][yy]==1) continue;
        v[xx][yy]=2;
        if (a[xx][yy]==c) fill(xx,yy,c);
    }
}
int pd() {
    int cnt=0;bool bz[6];memset(bz,0,sizeof(bz));
    fo(i,1,n) fo(j,1,n) if (v[i][j]!=1&&!bz[a[i][j]]) {
        bz[a[i][j]]=1;cnt++;
    }
    return cnt;
}
bool can(int c) {
    bool bz=0;
    fo(i,1,n) fo(j,1,n) if (v[i][j]==2&&a[i][j]==c) {
        fill(i,j,c);bz=1;
    }
    return bz;
}
bool dfs(int x) {
    int p=pd();
    if (x+p>id) return 0;
    if (!p) return 1;
    int rev[N][N];
    memcpy(rev,v,sizeof(rev));
    fo(i,0,5) {
        if (can(i)&&dfs(x+1)) return 1;
        memcpy(v,rev,sizeof(v));
    } 
    return 0;
}
int main() {
    for(scanf("%d",&n);n;scanf("%d",&n)) {
        fo(i,1,n) fo(j,1,n) scanf("%d",&a[i][j]);
        memset(v,0,sizeof(v));
        fill(1,1,a[1][1]);
        for(id=0;id<=n*n;id++) if (dfs(0)) break;
        printf("%d\n",id);
    }
}
版权声明:既然是蒟蒻写的文,那么各位大爷就将就着看吧~跑的比西方记者慢多了233 举报

相关文章推荐

【NOIP2013模拟】水叮当的舞步

Description给出一个N*N的网格,每个格子有它的颜色0~5。 每一次你可以选择一个颜色,然后把左上角的格子所在的联通块里的所有格子变成选择的那种颜色。这里的联通是指两个格子有公共边,并且颜...

【NOIP2013模拟】水叮当的舞步

【NOIP2013模拟】水叮当的舞步 地毯上的格子有N行N列,每个格子用一个0~5之间的数字代表它的颜色。 水叮当可以随意选择一个0~5之间的颜色,然后轻轻地跳动一步,地毯左上角的格子所在的联通块里...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

[JZOJ 3422] 水叮当的舞步

Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变。 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地...

NOIP2013模拟10.23轮舞前夕

题目大意 给定一颗n节点树,问:在选择最少点情况下,使得树上所有点都与这些点中至少一个有边连接(除了选中的点)的方案数以及选择点数这题,我们可以考虑用树形dp做,一个点的状态,0为没被选定且儿子节点...

玖富叮当在线客服电话\玖富\叮当\客服电话

玖富叮当在线客服电话\玖富\叮当\客服电话人工服务热线:O576-8215-9728;人工服务热线:O576-8215-9728。综合业务查询与办理!秉承客户至上的承诺,通过提供可靠、准点便捷的优质服...

【NOIP2013模拟】KC的陶器

『NOIP2013模拟』KC的陶器【NOIP2013模拟】KC的瓷器 (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB De...

小叮当中英对白

//程序块Block //1.每一对大括号{}所涵盖的范围,即为一个程序块 //BlockClass为其他程序块的外部程序块,其他程序块为BlockClass的内部程序块 class Ex2_3_1 ...

NOIP2013模拟最小比例

题目图中共有N个点的完全图,每条边都有权值,每个点也有权值。要求选出M个点和M-1条边,构成一棵树,使得:所有边的权值与所有点的权值之和的比率最小。样例输入:第一行包含两个整数N和M(2<=N<=15...

【NOIP2013模拟】粉刷匠

Description给出n个球,其中有C1个球是颜色1的,有C2个球是颜色2的,有C3个球是颜色3的…… 有Ck个球是颜色k的。求相邻两个球颜色不同的排列方案。 k<=15,ci<=6,数据组数...

【NOIP2013模拟】DY引擎

Description给出一张无向图,问从1到n的最短路。 你可以瞬移k次,每次从u瞬移到v的条件是:u到v中存在一条不经过收费站的距离<=L的路径。当然,u或v可以是收费站。 收费站不会直接告诉...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)