UVA585- Triangles(暴力枚举)
来源:互联网 发布:碗莲的种植方法淘宝 编辑:程序博客网 时间:2024/06/10 06:28
题目链接
题意:找出所给图形中,没有被染色的最大的三角形的面积。
思路:仔细观察图形可以发现大三角形的形成是已一个未染色小三角形为基础,然后一层一层往上叠加(如果整层没被染色)。从上往下看图形不难发现,如果小三角形的底边朝上,叠加是向上形成的,底边朝下,叠加是向下形成的。所以我们可以枚举每一个没有被染色的小三角,更新能叠加的最大的层数,也就能得到最大三角形的面积。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 1005;char str[MAXN][MAXN];int g[MAXN][MAXN];int n, ans, dir;void init() { ans = 0; getchar(); memset(g, -1, sizeof(g)); for (int i = 0; i < n; i++) { gets(str[i]); for (int j = 0; j < strlen(str[i]); j++) if (str[i][j] == '-') g[i][j] = 0; }}void dfs(int x, int y, int cnt) { if (x < 0 || x > n) { ans = max(ans, cnt); return; } for (int i = y - cnt; i <= y + cnt; i++) { if (g[x][i] == -1) { ans = max(ans, cnt); return; } } dfs(x + dir, y, cnt + 1); }int main() { int t = 0; while (scanf("%d", &n) == 1 && n) { init(); for (int i = 0; i < n; i++) { for (int j = i; j < 2 * (n - i) + i - 1; j++) { if (!g[i][j]) { if ((i + j) % 2) { dir = 1; dfs(i, j, 0); } else { dir = -1; dfs(i, j, 0); } } } } printf("Triangle #%d\n", ++t); printf("The largest triangle area is %d.\n\n", ans * ans); } return 0;}
0 0
- UVA585- Triangles(暴力枚举)
- Isosceles Right Triangles 坐标暴力枚举
- uva 585 - Triangles(暴力枚举)
- CodeForces 552D — Vanya and Triangles 暴力枚举
- Codeforce 552D Vanya and Triangles(暴力枚举)
- Light OJ:1307 Counting Triangles(二分+暴力枚举)
- Codeforces 552D Vanya and Triangles【暴力枚举+思维】
- UVA - 585 Triangles 暴力
- UVA 585 - Triangles(枚举)
- UVa 585 Triangles(暴力)
- 暴力枚举
- 暴力枚举?
- 暴力枚举
- 暴力枚举
- 暴力枚举
- uva585(dfs)
- lightoj 1307 Counting Triangles | 二分/暴力
- lightoj 1307 Counting Triangles | 二分/暴力
- JQuery checkbox复选框操作
- 真机调试 证书
- psql的简单题目
- Android:创建抽屉导航
- MYSQL 跨表delete
- UVA585- Triangles(暴力枚举)
- uva_10061 - How many zero's and how many digits ?
- 易學原論 韓長庚
- Android Studio安装及环境搭建
- replica chanel
- android 高级Canvas绘图
- 操作系统设计原理之计算机系统概述
- SQLServer的ISNULL函数和Mysql的IFNULL函数
- std::vector的前置声明