Poj 1157 LITTLE SHOP OF FLOWERS

题意:插花问题。给出一个二维矩阵,要求每一行都取出一个数,使得这些数的和最大,并且必须保证随着行数的增加,列数也必须增加。

思路:DP,dp[i][j]=dp[i-1][k]+data[i][j];(1<=k<j)

#include <stdio.h>
int dp[120][120];
int data[120][120];
int f,v;
#define minnum -100000000;
int main()
{
	int i,j,k;
	int max;

	scanf("%d%d",&f,&v);
	for (i=1;i<=f;i++) {
		for (j=1;j<=v;j++) {
			scanf("%d",&data[i][j]);
			dp[i][j]=minnum;
		}
	}
	for (i=1;i<=v;i++) {
		dp[1][i]=data[1][i];
		/*printf("%d ",dp[1][i]);*/
	}
	for (i=2;i<=f;i++) {
		for (j=1;j<=v;j++) {
			for (k=1;k<j;k++) {
				if (dp[i][j]<dp[i-1][k]+data[i][j])
					dp[i][j]=dp[i-1][k]+data[i][j];
			}
		}
	}
	max=dp[f][1];
	for (i=1;i<=v;i++)
		if (dp[f][i]>max)
			max=dp[f][i];

	printf("%d\n",max);
	return 0;
}


你可能感兴趣的:(Poj 1157 LITTLE SHOP OF FLOWERS)