poj1157(花店问题+经典DP)

来源:互联网 发布:知乎 刘鑫 编辑:程序博客网 时间:2024/04/28 04:00

     题目链接:http://poj.org/problem?id=1157

     题意:花店有F种花,V个花瓶。花和花瓶的编号均为1...N;当店主将每种花放在不同的花瓶里时所产生的美学值是不同,现告诉你每种花放在每个花瓶时的美学值,求如何放,这F种花能够获得最大的美学值,最大是多少。要求编号较大的花必须放在编号较大的瓶子中。

代码:

#include<stdio.h>#include<string.h>#define MAXN 105#define INF 1000000int v[MAXN][MAXN];int dp[MAXN][MAXN];int F,V;int max(int x,int y){return x>y ? x : y ;}int main(){int i,j,k;while(scanf("%d%d",&F,&V)!=EOF){for(i=1;i<=F;i++)for(j=1;j<=V;j++)scanf("%d",&v[i][j]);for(i=0;i<=V;i++){dp[0][i] = 0;if(i<=F)dp[i][0] = 0;}for(i=1;i<=F;i++)for(j=1;j<=V;j++)        dp[i][j] = -INF;    for(i=1;i<=F;i++){for(j=i;j<=V-F+i;j++){for(k=i-1;k<j;k++){dp[i][j] = max(dp[i][j],dp[i-1][k] + v[i][j]);}}         }/*for(i=0;i<=F;i++){for(j=0;j<=V;j++)printf("%d ",dp[i][j]);printf("\n");}*/        int ans = -INF;for(i=F;i<=V;i++)if(dp[F][i] > ans)ans = dp[F][i];printf("%d\n",ans);}return 0;}


 

原创粉丝点击