結果
問題 | No.266 最終進化を目指せ |
ユーザー |
![]() |
提出日時 | 2015-08-08 01:00:30 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 915 bytes |
コンパイル時間 | 367 ms |
コンパイル使用メモリ | 56,232 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-18 05:31:06 |
合計ジャッジ時間 | 1,140 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 24 |
ソースコード
#include <iostream> #include <cstring> using namespace std; int dp[11][11]; int ksei[11]; int n; int rek(int shinka,int kakusei){ if(ksei[shinka]<kakusei) return -2; if(shinka==0) return kakusei+1; if(dp[shinka][kakusei]==-1){ int r=99999999; int a=rek(shinka-1,kakusei),b; if(a!=-2) r=min(r,a+1); for(int ctr1=0;ctr1<kakusei;ctr1++){ a=rek(shinka,ctr1); b=rek(shinka,kakusei-1-ctr1); if(a!=-2 && b!=-2) r=min(r,a+b); } dp[shinka][kakusei]=r; } //cout<<shinka<<" "<<kakusei<<" "<<dp[shinka][kakusei]<<endl; return dp[shinka][kakusei]; } int main() { memset(dp,-1,sizeof(dp)); cin>>n; for(int ctr1=0;ctr1<=n;ctr1++) cin>>ksei[ctr1]; for(int ctr1=0;ctr1<ksei[n];ctr1++){ cout<<rek(n,ctr1)<<" "; } cout<<rek(n,ksei[n])<<endl; return 0; }