您的位置:首页 > 其它

POJ 2757 最长上升子序列 解题报告

2009-02-08 22:24 281 查看
POJ 2757 最长上升子序列 解题报告

编号:2757

 

考查点:动态规划

 

思路:求最优的问题首先要想到用动态规划,想到用动态规划要想到如何找状态转移,这道题肯定是DP,状态转移我倒是想了半天,好不容易搞定了递归+状态量部分,结果忘了从状态量里找到最大的输出了,幸亏及时发现.。

 

提交情况: 程序递归部分改了N次,后来提交因为没有从状态量里找最大的输出WA了一次,其它都还好.用DP时间和空间效果都还不错.。

 

Source Code:

 

//POJ Grids 2757

#include <iostream>

using namespace std;

int num[1024];

int len[1024];

int Search(int i)

{

    if (i==1)

        return len[1];

    else

    {

        int max = 0;

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

        {

            if (!len[j])

                len[j] = Search(j);

            if (len[j]>max&&num[i]>num[j])

                max = len[j];

        }

        len[i] = max+1;

    }    

    return len[i];

}

int main()

{

    int n;

    cin>>n;

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

    {

        cin>>num[i];

    }

    memset(len,0,sizeof len);

    len[1] = 1;

    Search(n);

    int max = 0;

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

    {

        if (len[i]>max)

            max = len[i];

    }

    cout<<max<<endl;

    return 0;

}

总结:DP果真很难,我目前还不能一眼就看出状态转移关系,更不用说其它的了,路漫漫..努力!

 

 

 

                                                      
By   Ns517

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