SRM553 Div1Medium TwoConvexShapes
来源:互联网 发布:乐视自行车软件 编辑:程序博客网 时间:2024/05/22 14:12
【分析】
这道题不要看翻译!看原题!
题目看懂了,然后就蒙逼了。
应该比较容易知道这是一道计数dp。没错,万恶的计数dp!你不仅要知道他有多少种情况,怎样将他简单的实现,而且还要考虑哪些奇奇怪怪的重复情况!
总之,写这道题是崩溃的。直接贴代码。
【代码】
#include <bits/stdc++.h>#define mod 1000000007using namespace std;#define M 55bool to[M][M];char mp[M][M];int dp[M][M];int ans,n,m;void chk(int &x,int y){ x+=y; if(x>=mod)x%=mod;}struct node{ void down_disrud(){//单调不减 for(int i=0;i<=m;i++)dp[0][i]=1; for(int i=1;i<=n;i++){ for(int j=0;j<=m;j++){ if(!j)dp[i][j]=0; else dp[i][j]=dp[i][j-1]; if(to[i][j])chk(dp[i][j],dp[i-1][j]); } } chk(ans,dp[n][m]); } void down_disinc(){//单调不增 for(int i=1;i<=n/2;i++){ for(int j=0;j<=m;j++)swap(to[i][j],to[n-i+1][j]); } down_disrud(); for(int i=1;i<=n/2;i++){ for(int j=0;j<=m;j++)swap(to[i][j],to[n-i+1][j]); } } void lie_same(){ for(int j=0;j<=n;j++){ bool f=1; for(int i=1;i<=j&&f;i++){ if(!to[i][m])f=0; } for(int i=j+1;i<=n&&f;i++){ if(!to[i][0])f=0; } ans-=f; } } void hang_same(){ for(int j=0;j<=m;j++){ bool f=1; for(int i=1;i<=n;i++)f&=to[i][j]; ans-=f; } } void all_same(){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(mp[i][j]=='W')return; } } chk(ans,1); } void solve(){ for(int i=1;i<=n;i++){ for(int j=0;j<=m;j++){ bool &f=to[i][j]=1; for(int k=1;k<=j&&f;k++){ if(mp[i][k]=='W')f=0; } for(int k=j+1;k<=m&&f;k++){ if(mp[i][k]=='B')f=0; } } } down_disrud(); down_disinc(); hang_same(); lie_same(); all_same(); }}T;int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++)scanf("%s",mp[i]+1); T.solve(); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(mp[i][j]=='B')mp[i][j]='W'; else if(mp[i][j]=='W')mp[i][j]='B'; } } T.solve(); cout<<(ans+mod)%mod<<endl; return 0;}
0 0
- SRM553 Div1Medium TwoConvexShapes
- SRM553 Div1Medium TwoConvexShapes
- SRM553
- SRM 553 - 500 TwoConvexShapes
- SRM553 Div1 500
- SRM548 Div1Medium KingdomAndDice
- SRM551 Div1Medium ColorfulWolves
- SRM573 Div1Medium Ski Resorts
- SRM574 Div1Medium PolygonTraversal
- SRM579 Div1Medium TravellingPurchasingMan
- SRM588 Div1Medium KeyDungeonDiv1
- SRM589 Div1Medium GearsDiv1
- SRM554 Div1Medium TheBrickTowerMediumDivOne
- SRM548 Div1Medium KingdomAndDice
- SRM551 Div1Medium ColorfulWolves
- SRM593 Div1Medium MayTheBestPetWin
- SRM573 Div1Medium Ski Resorts
- SRM579 Div1Medium TravellingPurchasingMan
- 用Wireshark简单分析HTTPS传输过程-抓包过程
- eclipse项目有红叉 但里面没错
- Java中的动态代理
- yii hasOne
- AIDL
- SRM553 Div1Medium TwoConvexShapes
- fisher判别分析原理+python实现
- 理解Java对象序列化
- App移动端项目管理
- 阿里云centos6.8安装可视化界面以及远程链接
- 善守者,藏于九地天之下
- 服务器错误500 501 502 503 504 505 详解
- 杭电oj1231(动态规划最大连续子序列之和)
- 设计模式——装饰模式详解