結果
| 問題 |
No.266 最終進化を目指せ
|
| コンテスト | |
| ユーザー |
kyuridenamida
|
| 提出日時 | 2015-08-07 23:27:47 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 742 bytes |
| コンパイル時間 | 1,365 ms |
| コンパイル使用メモリ | 159,792 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-18 05:24:20 |
| 合計ジャッジ時間 | 1,987 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 24 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
vector<int> S;
int dp[114][514];
int dfs(int sinka,int kakusei){
if( dp[sinka][kakusei] != -1 ) return dp[sinka][kakusei];
if( kakusei > S[sinka] ) return 1e9;
if( sinka == 0 ){
if( kakusei == 0 ) return 1;
return dfs(sinka,kakusei-1) + 1;
}else{
int answer = 1e9;
answer = min( dfs(sinka-1,kakusei)+1,answer);
if( kakusei ){
for(int i = 0 ; i < kakusei ; i++)
answer = min( dfs(sinka,kakusei-i-1)+dfs(sinka,i), answer );
}
return dp[sinka][kakusei] = answer;
}
}
int main(){
memset(dp,-1,sizeof(dp));
int N;
cin >> N;
S = vector<int>(N+1);
for(int i = 0 ; i <= N ; i++) cin >> S[i];
for(int i = 0 ; i <= S[N] ; i++) cout << dfs(N,i) << (i==S[N]?"\n":" ");
}
kyuridenamida