您的位置:首页 > 运维架构

poj 1157 LITTLE SHOP OF FLOWERS——简单DP

2011-08-03 11:57 399 查看
这段时间都在做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:[/b] 1157User:[/b] a27400
Memory:[/b] 484KTime:[/b] 32MS
Language:[/b] G++Result:[/b] 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
[m]);
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: