关闭

【NOIP2013模拟】水叮当的舞步

标签: NOIP2013模拟水叮当的舞步搜索暴力
435人阅读 评论(0) 收藏 举报
分类:

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);
    }
}
1
0
查看评论

水叮当的舞步(迭代搜索+A*搜索)

水叮当的舞步题目描述: 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变。 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上的格子有N行N列,每个格子用一个0~5之间的数字代表它的颜色。 水叮当可以随意选择一个0~5...
  • cax1165
  • cax1165
  • 2016-10-04 17:38
  • 460

[JZOJ3422]【NOIP2013模拟】水叮当的舞步

Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变。 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上的格子有N行N列,每个格子用一个0~5之间的数字代表它的颜色。 水...
  • hzj1054689699
  • hzj1054689699
  • 2016-05-28 15:05
  • 179

【bzoj3041】水叮当的舞步

Description水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变。 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上的格子有N行N列,每个格子用一个0~5之间的数字代表它的颜色。 水叮当可以随意选择一个0~5之间...
  • w_yqts
  • w_yqts
  • 2017-11-08 15:45
  • 79

CodeVS2495 水叮当的舞步

标签:IDA* 题目 题目传送门 题目描述 Description   水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变。   为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~   地毯上的格子有N行N列,每个格子用...
  • qwerty1125
  • qwerty1125
  • 2018-01-05 21:27
  • 64

【codevs2495】水叮当的舞步

题目描述 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变。为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上的格子有N行N列,每个格子用一个0~5之间的数字代表它的颜色。水叮当可以随意选...
  • chty2018
  • chty2018
  • 2016-11-21 13:04
  • 72

BZOJ P3041水叮当的舞步

直接IDA* 枚举上限步数 然后爆搜 每一次爆搜都用A*减一下枝 然后估价函数的话就是目前还未被加进联通块的毯子的颜色数 好了
  • mdnd1234
  • mdnd1234
  • 2017-03-28 10:01
  • 173

【NOIP2013模拟】七夕祭

Sample Input4 32 5 4 32 1 33 2 44 2 4Sample Output-12Data ConstraintHint第一份订单满足后,4天剩余教室分数分别为0,3,2,3. 第二份订单要求第二天到第四天每天提供三个教室,而第三天剩余的教室数为二,因此无法满足。分配停止通知...
  • HownoneHe
  • HownoneHe
  • 2016-04-09 15:03
  • 661

[JZOJ 3422] 水叮当的舞步

Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变。 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上的格子有N行N列,每个格子用一个0~5之间的数字代表它的颜色。 水叮当可以随意选择一个0~5之...
  • lyd_7_29
  • lyd_7_29
  • 2016-05-31 19:39
  • 335

舞步学院PUA就是个坑,大家千万不要信(一)

报过一次舞步学院的私教课程。 当时也是追一个喜欢的妹子,表白被拒了。 上网搜追女生方法的时候,搜到的舞步学院。看了一下网上的介绍,还有特么的实战案例分析,顿时感觉开启了新天地。 然后就买了他们的理论课程。 本人理科男,觉得跟高考一样。买套理论教材自己看...
  • g4ok0owi6u
  • g4ok0owi6u
  • 2017-05-31 10:16
  • 4013

JZOJ 3506. 【NOIP2013模拟11.4A组】善良的精灵

二分图
  • huangjingyuan107
  • huangjingyuan107
  • 2017-02-10 21:20
  • 637
    个人资料
    • 访问:174967次
    • 积分:5415
    • 等级:
    • 排名:第5911名
    • 原创:362篇
    • 转载:4篇
    • 译文:0篇
    • 评论:82条
    博客公告
    我觉得我已经是一碗废蘑菇汤了……
    博客专栏
    文章分类
    最新评论