poj1157 LITTLE SHOP OF FLOWERS (dp)

题意:用n种花按顺序放入m个花瓶中,m个花瓶是固定的,编号为1~n的话必须按编号由小到大的顺序放入花瓶且都必须放入花瓶,每种花放入不同的花瓶得到不同的审美价值,

编程求最大审美价值。

用dp[ i ][ j ] 表示前 i 种花放入前 j 个花瓶中得到的最大审美价值,所以状态转移方程为: dp[ i ][ i ] = MAX(dp[ i ][ j ], dp[ i - 1 ][ k ] + val[ i ][ j ]) ( k 的值为 i-1~j-1 ,因为第 i 种花能放入的花瓶的最小编号为 i )。

#include <iostream>
using namespace std;

#define MAX(a, b) a>b?a:b
#define M 102

int dp[M][M], val[M][M];

int main()
{
	int i, j, k;
	int n, m;

	scanf("%d%d", &n, &m);
    for(i = 1; i <= n; i++){
	    for(j = 1; j <= m; j++)
           scanf("%d", &val[i][j]);
	}
    
	for(i = 1; i <= m-n+1; i++)
		dp[1][i] = val[1][i];
	for(i = 2; i <= n; i++){
		for(j = i; j <= m-n+i; j++){
			dp[i][j] = -10000000;
		    for(k = i-1; k < j; k++)
				dp[i][j] = MAX(dp[i][j], dp[i-1][k]+val[i][j]);
		}
	}
	int ans = -10000000;
    for(i = n; i <= m; i++)
		if(ans < dp[n][i])
			ans = dp[n][i];
	printf("%d\n", ans);
	return 0;
}


 

你可能感兴趣的:(poj1157 LITTLE SHOP OF FLOWERS (dp))