• 动态规划理解


    动态规划

    基本思想

    动态规划算法与分治法类似,其基本思想也是将待求解问题分解乘若干个子问题,先求子问题,

    然后从这些子问题的解得到原问题的解。动态规划中分解得到的子问题往往不是相互独立的。

    若用分治法,则分解的子问题数目会太多,导致时间复杂度过高。在动态规划中我们将已解决

    子问题的答案保存在一个表,在需要时在找到以求的答案,这样可以避免大量的重复计算,这

    便是动态规划的基本思想。

    步骤:

    (1)找出最优解的性质,并刻画其结构特征

    (2)递归定义最优质

    (3)以自底向上的方式计算出最优值

    (4)根据计算最优值时得到的信息构造最优解

    习题递归方程

    //单调递增最长子序列
    //ans[i]表示以元素a[i]为结尾的最长递增子序列的值
        for(int i=1;i<=n;i++)
            for(int j=0;j<=i;j++)
            {
                if(a[i]>a[j]&&ans[i]<ans[j]+1)
                    ans[i]=ans[j]+1;
                res=max(res,ans[i]);
            }
        cout<<res<<endl;   
    //租用游艇问题    
    //dp[i]表示从1到i花费的最少钱
    
        for(int i=2;i<n;i++)
        {
            for(int j=i+1;j<=n;j++)
            {
                cin>>temp;
                if(dp[i]+temp<dp[j])
                    dp[j]=dp[i]+temp;
            }
        }
        cout<<dp[n]<<endl; 

    结对编程情况

    结对编程主要在上机实践时交流比较多,代码之间的风格也存在一定的不同。不同的题目队友有自己的想法

    能够多多学习,希望能取长补短更进一步。

  • 相关阅读:
    arm-linux-3.4.2移植for2440
    编译内核是出现:arch/arm/mm/tlb-v4wbi.S:64:error: too many positional arguments
    poj3050 Hopscotch
    poj3187 Backward Digit Sums
    poj2718 Smallest Difference
    hihocoder offer收割编程练习赛10 C 区间价值
    poj1862 Stripies
    poj3262 Protecting the Flowers
    poj2229 Sumsets
    poj2385 Apple Catching
  • 原文地址:https://www.cnblogs.com/LjwCarrot/p/9925116.html
Copyright © 2020-2023  润新知