第12回日本情報オリンピック 本選(オープンコンテスト)から、その提出コードの解答例です。
AtCoderとは、コンテストを通じて、プログラミングやアルゴリズムを学習するサービスです。
atcoder.jp
プログラミングコンテストとは、「与えられた問題をいかに素早く、正確に」解くことができるかを競うものです。
「競技プログラミング」を略して、「競プロ」などと呼ばれています。
#2 - IOI 列車で行こう (Take the 'IOI' train)
僕が作成、提出したコードは、以下のとおりです。
/* AtCoder Problems in C++ #2 - IOI 列車で行こう (Take the 'IOI' train) https://atcoder.jp/contests/joi2013ho/tasks/joi2013ho2 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll m,n; cin>>m>>n; string s,t; cin>>s>>t; vector<vector<vector<ll>>> dp(m+1,vector<vector<ll>>(n+1,vector<ll>(2,-1000000000))); for(ll i=0;i<=m;i++){ for(ll j=0;j<=n;j++){ dp[i][j][1]=0; } } for(ll i=0;i<=m;i++){ for(ll j=0;j<=n;j++){ if(i>=1){ if(s[i-1]=='I'){ dp[i][j][0]=max(dp[i-1][j][1]+1,dp[i][j][0]); } if(s[i-1]=='O'){ dp[i][j][1]=max(dp[i-1][j][0]+1,dp[i][j][1]); } } if(j>=1){ if(t[j-1]=='I'){ dp[i][j][0]=max(dp[i][j-1][1]+1,dp[i][j][0]); } if(t[j-1]=='O'){ dp[i][j][1]=max(dp[i][j-1][0]+1,dp[i][j][1]); } } } } ll ans=0; for(ll i=0;i<=m;i++){ for(ll j=0;j<=n;j++){ ans=max(ans,dp[i][j][0]); } } cout<<ans<<endl; return 0; }