题解:P4813 [CCO 2014] Troy 与三角形
lusscareya_ · · 题解
题解:P4813 [CCO 2014] Troy 与三角形
题目传送门
虽是一道绿题,但码量只有一道橙题。
题目让求#号三角形的数量,考虑 dp,其中 #号三角形的个数。
很显然,每一个点的#号三角形的个数其实是和它在右下角最大形成的#号三角形高度相等。而每个点在右下角最大形成的#号三角形高度只收到如图中两个因素的影响:
显然
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
char c[2005][2005];int cnt,ans,n,dp[2005][2005];
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>c[i][j];//输入
for(int i=1;i<=n;i++){
cnt=0;for(int j=1;j<=n;j++){
if(c[i][j]=='#'){
cnt++;//cnt对应题目中的y
dp[i][j]=min(dp[i-1][j-1]+1,(cnt+1)/2);//dp转移
ans+=dp[i][j];
}
else cnt=0;
}
}
cout<<ans;
return 0;
}