zoukankan      html  css  js  c++  java
  • DP习题笔记

    Q1:Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.

    class Solution {
    public:
        int numSquares(int n) {
            if (n == 0) return 0;
            
            vector<int> dp(n+1, 0);
            
            for (int i=0; i<=n; ++i) {
                dp[i] = i;
                for (int j = 2; j<=sqrt(i); ++j) {
                    dp[i] = min(dp[i], 1 + dp[i - j*j]);
                }
            }
            
            return dp[n];
        }
    };

     Q2:A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1a2, ..., aN) be any sequence (ai1ai2, ..., aiK), where 1 <= i1 < i2 < ... < iK<= N. For example, sequence (1, 7, 3, 5, 9, 4, 8) has ordered subsequences, e. g., (1, 7), (3, 4, 8) and many others. All longest ordered subsequences are of length 4, e. g., (1, 3, 5, 8).

    一道求最长上升子序列的DP题,主要思想是找出转移方程dp[i]=max(dp[j]+1) (j<i且a[j]<a[i])

    #include <iostream>
    #include <vector>
    using namespace std;
    int main(int argc, char **argv)
    {
        vector<int> a = { 1,2,3,5,9,4,8,10,14,2,5,2 };
        vector<int> dp(a.size(),0);
        dp[0] = 1;
        int ml = 1;
        for (int i = 1; i < a.size(); ++i) {
            for (int j = 0; j < i; ++j) {
                if (a[j] <= a[i])
                    dp[i] = max(dp[j] + 1, dp[i]);
            }
            ml = max(ml, dp[i]);
        }
        cout << ml;
        return 0;
    }
  • 相关阅读:
    数量关系
    笨办法学python问题记录
    CSS布局与定位
    python学习 预备篇
    基于hexo搭建个人博客
    CSS常用样式
    计算机组成原理(期末篇)
    Codeblock错误提示栏隐藏
    Markdown标记语言
    笨办法学python(不同版本的python代码差别)
  • 原文地址:https://www.cnblogs.com/lightmonster/p/10657216.html
Copyright © 2011-2022 走看看