背包
AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main(){
int T, Case = 1, N;
int number[210][210];
int dp[210][210];
cin >> T;
while( T-- ){
cin >> N;
memset( number, 0, sizeof( number ) );
memset( dp, 0, sizeof( dp ) );
for( int i = 1; i <= N; i++ ){
for( int j = 1; j <= i; j++ ){
cin >> number[i][j];
}
}
for( int i = N + 1; i <= 2 * N - 1; i++ ){
for( int j = 1; j <= 2 * N - i; j++ ){
cin >> number[i][j];
}
}
for( int i = 1; i <= N; i++ ){
for( int j = 1; j <= N; j++ ){
dp[i][j] = max( dp[i-1][j] + number[i][j], dp[i-1][j-1] + number[i][j] );
}
}
for( int i = N + 1; i <= 2 * N - 1; i++ ){
for( int j = 1; j <= N; j++ ){
dp[i][j] = max( dp[i-1][j] + number[i][j], dp[i-1][j+1] + number[i][j] );
}
}
cout << "Case " << Case++ << ": " << dp[2*N-1][1] << endl;
}
return 0;
}