SOJ 2800_三角形
2024-08-30 06:45:26
真的是O不是0【看了discuss才发现。。。。。一个大写的蠢
【题意】多个黑白三角形组成的倒三角,求白三角形组成的最大倒三角的面积
【分析】由于问的是倒三角个数,所以只需看与行数奇偶性相同的白色倒三角形,设v[i][j]为以第i行第j列的倒三角为顶点的最大白色倒三角形面积,则v[i][j]可通过v[i-1][j-1]和v[i-1][j+1]构成的白色倒三角面积表示,导出状态转移方程。
【代码】
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
typedef long long ll;
using namespace std;
const int INF=0x3fffffff;
int a[1100][2500];
int v[1100][2500];
int temp,Min,Max;
int num,flag;
int main (void)
{
scanf("%d",&num);
while(num>0)
{
getchar();
Max=1,flag=0;
memset(a,-1,sizeof(a));
memset(v,0,sizeof(v));
for(int i=0;i<num;i++)
{
for(int j=0;j<2*num-i-1;j++)
{
if(getchar()=='O')
{
v[i][j]=1;
a[i][j]=0;
if((j-i)%2==0) flag=1;
}
}
getchar();
}
for(int i=1;i<num;i++)
{
for(int j=i;j<2*num-i-1;j+=2)
{
if((a[i][j]==0)&&(a[i-1][j]==0))
{
Min=min(v[i-1][j-1],v[i-1][j+1]);
temp=(int)(sqrt(Min)+0.5);
v[i][j]+=2*Min-(temp-1)*(temp-1)+1;
Max=max(v[i][j],Max);
}
}
}
if(flag)
printf("%d\n",Max);
else
printf("0\n");
scanf("%d",&num);
}
return 0;
}
本来想用一维数组写的,可是弄得很乱,还是二维数组吧。
最新文章
- [linux系统]--crontab定时任务
- C#编程总结 字符转码
- java实现LIS算法,出操队形问题
- KMP算法初探
- photoshop:把路径存储为形状
- Xcode7如何添加pch文件
- oracle 高版本导出低版本数据库并且导入到低版本数据的方法
- 图形绘制 Canvas Paint Path 详解
- Super Jumping! Jumping! Jumping!(dp)
- Linux 时区变化
- 三、SolrCloud的搭建
- Codeforces 437 D. The Child and Zoo 并查集
- Promise库
- MQ与webservice的区别,MQ的区别
- CXF整合spring,在tomcat中发布webService
- OpenCV 图像特效
- Flash:TextField字体不显示/文字不显示/文字丢失
- java 5.0引入的新特性-枚举
- POJ 2195 Going Home 最小费用流 难度:1
- Oracle拉出在sqlserver建表的语句