hdu 1045 Fire Net(贪心)
来源:互联网 发布:怎么修改淘宝店铺网址 编辑:程序博客网 时间:2024/06/05 04:25
小记:这题是暑期训练放在贪心这一章的题,我瞎蒙的, 没想到真的对了
思路:我的这个想法,我自己试了几组数据,也试图去举出点反例,但是都没用,答案都是正确的,而且也比较的简单可行,所以我抱着试试的态度做了。
贪心的思路就是,对方格的每个点记录下它上下左右四个方向所能覆盖的点的个数,
即因为你要放在这点上的话,那么这点的上下左右四个方向就不能再放了,当然碰到墙就打止
例如:
题目这组数据4.X......XX......
那么转化过来就是
2 0 5 5
5 4 7 7
0 0 5 5
4 4 7 7
就这样
然后对个数值进行从小到大排序,依次选择,选择了该点之后,那么它所覆盖的点都不能在被选择了,标记起来即可。
答案就是你所选择的点的个数
代码:
#include <iostream>#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <map>#include <set>#include <vector>#include <stack>#include <queue>#include <algorithm>using namespace std;#define mst(a,b) memset(a,b,sizeof(a))#define REP(a,b,c) for(int a = b; a < c; ++a)#define eps 10e-8const int MAX_ = 110;const int N = 100010;const int INF = 0x7fffffff;struct node{ int s, e; int num;}t[MAX_];int vis[MAX_][MAX_];char str[MAX_][MAX_];bool cmp(const node& a, const node& b){ return a.num < b.num;}int main(){int T;int n, m;//scanf("%d",&T);while(scanf("%d",&n), n) { REP(i, 0, n){ scanf("%s", str[i]); } int cnt = 0; //mst(vis, 0); REP(i, 0, n){ REP(j, 0, n){ if(str[i][j] == '.'){ vis[i][j] = 0; int tmp = 0; int h = 0; while(i-h > -1 && str[i-h][j] == '.'){h++; tmp++;} h = 1; while(i+h < n && str[i+h][j] == '.'){h++; tmp++;} h = 1; while(j-h > -1 && str[i][j-h] == '.'){h++; tmp++;} h = 1; while(j+h < n && str[i][j+h] == '.'){h++; tmp++;} t[cnt].s = i; t[cnt].e = j; t[cnt].num = tmp; cnt++; }else vis[i][j] = 1; } } sort(t, t+cnt, cmp); int ans = 0; REP(i, 0, cnt){ int x = t[i].s, y = t[i].e; if(!vis[x][y]){ ans++; int h = 0; while(x-h > -1 && str[x-h][y] == '.'){vis[x-h][y] = 1;h++; } h = 1; while(x+h < n && str[x+h][y] == '.'){vis[x+h][y] = 1;h++; } h = 1; while(y-h > -1 && str[x][y-h] == '.'){vis[x][y-h] = 1;h++; } h = 1; while(y+h < n && str[x][y+h] == '.'){vis[x][y+h] = 1;h++; } } } printf("%d\n", ans);}return 0;}
0 0
- hdu 1045 Fire Net(贪心)
- HDU 1045 Fire Net(贪心)
- HDU 1045 Fire Net 贪心
- HDU Fire Net (贪心)
- HDU 1045 Fire Net(搜索/贪心/二分图最大匹配)
- hdu 1045 Fire Net
- HDU 1045 Fire Net
- HDU 1045 Fire Net
- Hdu 1045 Fire Net
- HDU 1045 Fire Net
- hdu 1045 Fire Net
- HDU-1045-Fire Net
- hdu 1045 Fire Net
- hdu 1045 Fire Net
- HDU 1045 Fire Net
- hdu 1045 Fire Net
- HDU-1045 Fire Net
- HDU:1045 Fire Net
- source insight的自动缩进 以及网上的一些使用技巧
- HD1096输入格式(8)--20140722
- 用户界面设计的40条技巧
- ★★★易忘点总结〖面向对象〗
- hdu 2008数值问题 20140722
- hdu 1045 Fire Net(贪心)
- 给phpcms v9专题添加一个radio单选按钮,可以多次利用专题创建不同的栏目进行内容编辑,给专题添加一个自定义字段
- 学习KeyShot 3D 动画要点
- ★★★易忘点总结〖集合〗
- 中国剩余定理
- Dijkstra算法的Java实现
- 一道sql题目,列转行
- 插入排序
- 在Centos Linux下,使用MD5头文件