一.原题链接:http://poj.org/problem?id=1157
二.题意:题意看不懂啊,搜了一下,是给一个矩阵,每行取一个,下一行取的数的列数要大于上一行所取得列数。求所取的最大数。
三.思路:简单DP,我都能做的DP- -!dp[i][j]表示第i行取第j个的最大数。
dp[i][j] = dp[i][j] + max(dp[i-1][i-1], dp[i-1][i],.......dp[i-1][j-1]);
四.代码:
//POJ1157
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int nValue[7];
int dp[105][105];
const int INF = 1<<29;
int main()
{
// freopen("in.txt", "r", stdin);
int i, j, k, F, V, maxNum;
cin>>F>>V;
for(i = 0; i < F; i++)
for(j = 0; j < V; j++)
scanf("%d", &dp[i][j]);
for(i = 1; i < F; i++){
for(j = i; j < V; j++){
maxNum = -INF;
for(k = i - 1; k < j; k++){
maxNum = max(maxNum, dp[i-1][k]);
}
dp[i][j] += maxNum;
}
}
maxNum = -INF;
for(i = F - 1; i < V; i++){
maxNum = max(dp[F-1][i], maxNum);
}
cout<<maxNum<<endl;
return 0;
}