poj 1157 LITTLE SHOP OF FLOWERS——简单DP

这段时间都在做DP啊啊……

大意:有F朵花和V个花瓶,F<V,不同的花在不同的花瓶里面观赏价值不一样,每个花瓶只能插一束花,而且花要按顺序插。求最大观赏价值。

这个题关键就是有负值,注意初始化,在代码里面说把。。

状态转移方程:

dp[i][j]表示把i朵花插到j个花瓶里面能获得的最大美学价值

则dp[i][j]=max(dp[i][j-1],dp[i-1][j-1]+map[i][j])

PS:我现在都没明白怎么看题目满足最优子结构性质……汗啊啊啊啊啊……

Problem: 1157 User: a27400
Memory: 484K Time: 32MS
Language: G++

Result: Accepted

#include<cstdio>
#include
<cstdlib>
#include
<cstring>
#include
<cmath>
#include
<algorithm>
#define INF 10000

int dp[110][110];
int map[110][110];

int max(int a,int b)
{
return a>b?a:b;
}
int main(void)
{
int n,m;
scanf(
"%d %d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf(
"%d",&map[i][j]);
}
for(int i=0;i<=n;i++)
for(int j=0;j<i;j++)
dp[i][j]
=-INF;//这个地方的初始化要注意!!
for(int j=1;j<=m;j++)
for(int i=1;i<=-max(-n,-j);i++)
{
dp[i][j]
=max(dp[i][j-1],dp[i-1][j-1]+map[i][j]);
}
printf(
"%d\n",dp[n][m]);
}

  

你可能感兴趣的:(poj)