poj 1157 LITTLE SHOP OF FLOWERS(DP)

来源:互联网 发布:vim c语言 ide 编辑:程序博客网 时间:2024/05/22 12:45

dp[i][j]表示处理到了第i束花,且第i束花在第j个花瓶里。


转移就是dp[i][j]=max(dp[i-1][k])+price[i][j] (枚举k,k的范围是从i-1到j)


注意这里面有负值,所以在写for循环的时候一定要注意处理边界,使得不合法情况都不会被访问到,否则可能会访问到非法的值为0的状态。


代码:

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define INF (-10000000)int dp[105][105];int F,V;int a[105][105];int main(){    scanf("%d%d",&F,&V);memset(a,0,sizeof(a));memset(dp,0,sizeof(dp));for(int i=1;i<=F;i++){for(int j=1;j<=V;j++){scanf("%d",&a[i][j]);}}for(int i=1;i<=F;i++){for(int j=i;j<=V-F+i;j++){int tmp=INF;for(int k=i-1;k<j;k++){tmp=max(tmp,dp[i-1][k]);}dp[i][j]=tmp+a[i][j];}}int res=INF;for(int i=F;i<=V;i++){res=max(res,dp[F][i]);}printf("%d\n",res);    return 0;}


0 0
原创粉丝点击