SOJ 2800_三角形
生活随笔
收集整理的這篇文章主要介紹了
SOJ 2800_三角形
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
真的是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);elseprintf("0\n");scanf("%d",&num);}return 0; }轉載于:https://www.cnblogs.com/Tuesdayzz/p/5758877.html
總結
以上是生活随笔為你收集整理的SOJ 2800_三角形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 删除表中重复记录,并保留一
- 下一篇: angular中的表单验证