博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Banyan_2015 c
阅读量:5886 次
发布时间:2019-06-19

本文共 3847 字,大约阅读时间需要 12 分钟。

hot3.png

/* * @brief bayan_2015 c * @file c.c * @author xiyan * @CreatedTime 2014/11/04 * @LastChanged 2014/11/06 * @note *      type: dfs, brute, greedy, dp * * */#include 
#define MAXN 1100int table[MAXN][MAXN];          /*1. altered 0. not*/int sum[MAXN][MAXN];            /*used for dp*/char buf[MAXN];                 /*quick IO*/int area;                       /*area brush covered*/int row, col;                   /*brush size*/int row_pos, col_pos;                    /*brush pos*/  int m, n;                       /*frame size*/int start_row, start_col;       /*start pos*/int max_row, max_col;     int cnt, tot;#define CLR(vec) memset(vec, 0, sizeof(vec))#define min(x,y) ((x) < (y) ? (x) : (y))#define CHECK_MV(x, y, d, r)    ( (x + d <= m) && (y + r <= n) && \        (sum[x + d][ y + r] - sum[x + d][y] - sum[x][y + r] + sum[x][y] == (d)*(r)))int dfs(int row_pos, int col_pos){    int col_move;    int row_move;    int i;    if(0 == CHECK_MV(row_pos, col_pos, row, col)){        return -1;        }    cnt = row * col;    while(1){        if(tot == cnt){            return 0;        }            col_move = 0;    for(i = 1; CHECK_MV(row_pos, col_pos , row, i +  col); i++){        col_move++;    }#ifdef DEBUG    printf("--------------------------------------------------\n");#endif        row_move = 0;        for(i = 1;  CHECK_MV(row_pos, col_pos, i + row, col); i++){             row_move++;               }#ifdef DEBUG    printf("row_pos:%d, col_pos:%d, col_move:%d, row_move:%d, tot:%d\n", row_pos, col_pos, col_move, row_move, cnt);#endif        if( !col_move && !row_move)            return -1;        if( col_move && row_move)            return -1;        if(col_move){            col_pos += col_move;            cnt += row*col_move;        }else{            row_pos += row_move;            cnt += col*row_move;        }    }}int main(){    int start_find = 0;    int i, j;    tot = 0;#ifdef DEBUG    freopen("./in",  "r", stdin);    freopen("./out", "w", stdout);#endif    scanf("%d%d", &m, &n);    getchar();    for(i = 0; i < m; i++){            gets(buf);            for(j = 0; j < n; j++){                    if(buf[j] == 'X'){                            table[i][j] = 1;                            if(start_find == 0){                                    start_find = 1;                                    start_row = i;                                    start_col = j;                            }                            tot++;                    }else{                            table[i][j] = 0;                    }            /*dp here*/                     sum[i + 1][j + 1] =  sum[i][j + 1] + sum[i + 1][j] - sum[i][j] + (table[i][j]? 1 : 0);             }    }#ifdef DEBUG    for(i = 0; i < m; i++){        for(j = 0; j < n; j++)            printf("%c", table[i][j] ? 'X': '.');        printf("\n");    }    for(i = 0; i < m + 1; i++){        for(j = 0; j < n + 1; j++)            printf("%d ", sum[i][j]);        printf("\n");    }#endif    for(max_row = 0 ; (start_row + max_row <= m) && table[start_row + max_row][start_col]; max_row++)                                ;    for(max_col = 0 ; (start_col + max_col <= n) && table[start_row][start_col + max_col]; max_col++)                                 ;#ifdef  DEBUG    printf("start_row: %d; start_col:%d, max_row: %d; max_col: %d\n", start_row, start_col, max_row, max_col);#endif    area = 0x7fffffff;    for(col = max_col, row = 1; row <= max_row; row++)        if( 0 == dfs(start_row, start_col))                    area = min(area, row*col);    for(row = max_row, col = 1; col <= max_col; col++)            if( 0 == dfs(start_row, start_col))                    area = min(area, row*col);    if(area == 0x7fffffff)            printf("-1\n");    else            printf("%d\n", area);    return 0;}

转载于:https://my.oschina.net/u/572632/blog/343451

你可能感兴趣的文章
matlab-线性代数 判断 向量组的线性相关性
查看>>
ubuntu 12.04下搭建web服务器(MySQL+PHP+Apache) 教程
查看>>
消息队列的应用场景、为什么要用消息队列
查看>>
IDEA同时启动两个Web项目
查看>>
linux查看线程状态--jstack
查看>>
kubernetes的rolling update机制解析
查看>>
金种子集团搭建TurboGate反垃圾邮件网关
查看>>
n2n***系统搭建
查看>>
outlook 搜索不到邮件
查看>>
java.lang.NoClassDefFoundError: org/apache/log4j/LogManager
查看>>
nodejs入门篇(一)-安装和环境配置
查看>>
Swift计时器对用于网络不好时
查看>>
EXT最新最全教程
查看>>
我的友情链接
查看>>
C++操作数据库写入到json配置文件中
查看>>
笨办法理解原型链
查看>>
我的友情链接
查看>>
Transferring Files with SFTP or SCP
查看>>
Linux0.00 “boot.s” 程序详解
查看>>
闭包与node.js
查看>>