经典插花的教训 PKU 1157

 

很早以前做过的题,,以为可以秒A ,就立刻敲了

结果

骄兵必败啊。。

心急吃不了豆腐

所以,惩罚自己写个解题报告

 

题意:有N种花,M个花瓶

按每种花插在不同的花瓶有不同的值。(可以有负数)

要求按照顺序把花插在花瓶上,先出现的花必须插在后给的花的前方,,

要求给出最大值

分析:

类似数塔的DP

只是方向是向右下方出发

每一行取一个值,

乱七八糟的一坨,,先搁着吧,,改了一个小时的代码,,越改越慢,,可是。还是有用到最近学的东西,,欣慰下,,当做练习吧,,不能为了做题而做题

#include<iostream>

#define Nmax 105

using namespace std;

const int INF=-600000;

int Max(int a,int b)

{

         return a>b?a:b;

}

int main()

{

         int n,m;

         int ans[Nmax],col[Nmax],max_sign[Nmax];

         while(scanf("%d%d",&n,&m)!=EOF)

         {

                   scanf("%d",&max_sign[0]);

                   for(int j2=1;j2<m;j2++)    

                   {

                            scanf("%d",&ans[j2]);

                            max_sign[j2]=Max(ans[j2],max_sign[j2-1]);

                   }

                   int len=m-n+1;

                   for(int i=1;i<n;i++)

                   {

                            len++;

                            int a=max_sign[i-1];

                            for(int j=0;j<m;j++)

                            {

                                     scanf("%d",&col[j]);

                                     if(j>=i&&j<len)

                                     {       

                                               ans[j]=a+col[j];

                                               a=max_sign[j];

                                               max_sign[j]=Max(ans[j],max_sign[j-1]);

                                     }

                            }

                   }

                   int ANS=INF;

                   for(int tt=n-1;tt<m;tt++)

                                     if(ans[tt]>ANS)ANS=ans[tt];

                   cout<<ANS<<endl;

         }

         return 0;

}

posted @ 2010-03-26 23:54  吴豆豆  阅读(208)  评论(0编辑  收藏  举报