Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Daruma Otoshi"
https://onlinejudge.u-aizu.ac.jp/problems/1611
・ダルマ落とし
僕が作成、提出したコードは、以下のとおりです。
・Aizu Online Judge in C++ #Volume16 - 1611 : Daruma Otoshi
/* Aizu Online Judge in C++ #Volume16 - 1611 : Daruma Otoshi https://onlinejudge.u-aizu.ac.jp/problems/1611 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; while(cin>>n,n){ ll w[310],dp[310][310]={}; for(ll i=0;i<n;i++){ cin>>w[i]; } for(ll k=1;k<n;k++){ for(ll i=0;i<n-k;i++){ if(dp[i+1][i+k-1]==k-1 && abs(w[i]-w[i+k])<=1){ dp[i][i+k]=dp[i+1][i+k-1]+2; } for(ll j=i;j<i+k;j++){ dp[i][i+k]=max(dp[i][i+k],dp[i][j]+dp[j+1][i+k]); } } } cout<<dp[0][n-1]<<endl; } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/