結果
問題 | No.38 赤青白ブロック |
ユーザー | btk |
提出日時 | 2015-05-16 11:56:23 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 4 ms / 5,000 ms |
コード長 | 631 bytes |
コンパイル時間 | 1,027 ms |
コンパイル使用メモリ | 62,292 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-23 12:46:46 |
合計ジャッジ時間 | 1,539 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 27 |
ソースコード
#include<iostream> #include<string> #include<algorithm> #include<vector> using namespace std; int kr,kb; string s; int res=0; int sz; vector<char> now; void backtrack(int n){ if(n==sz){ res=max(res,(int)now.size()); } else{ int m=(int)now.size(); if(sz-n+m<res)return; now.push_back(s[n]); if(s[n]=='R'){ if(kr>m||now[m-kr]!='R'){ backtrack(n+1); } } else if(s[n]=='B'){ if(kb>m||now[m-kb]!='B') backtrack(n+1); } else backtrack(n+1); now.pop_back(); backtrack(n+1); } } int main(){ cin>>kr>>kb>>s; sz=(int)s.size(); now.reserve(sz); backtrack(0); cout<<res<<endl; return 0; }