Volume 1 / 0181
Problem 0181 : Persistence
パソコン甲子園2008予選 問題09 こだわり
#include <iostream> #include <vector> #include <limits.h> using namespace std; int m, n; vector<int> bw; vector< vector<int> > bsw; int calc() { int new_val; int i, j, k; for( i=1; i<=n; i++ ) bsw[1][i] = bw[i]; for( i=1; i<=m; i++ ) bsw[i][1] = bw[1]; for( i=2; i<=n; i++ ){ for( j=2; j<=m; j++ ){ bsw[j][i] = INT_MAX; for( k=1; k<=i-1; k++ ){ new_val = ( bsw[j-1][k] > bw[i]-bw[k] ) ? bsw[j-1][k] : bw[i]-bw[k]; if( bsw[j][i] > new_val ) bsw[j][i] = new_val; } } } return bsw[m][n]; } int main(void) { int i; while( cin >> m >> n, m!=0, n!=0 ){ bsw.clear(); bw.clear(); bsw.resize(m+1); for( i=0; i<=m; i++ ) bsw[i].resize(n+1); bw.resize(n+1); bw[0] = 0; for( i=1; i<=n; i++ ){ cin >> bw[i]; bw[i] += bw[i-1]; } cout << calc() << endl; } return 0; }