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;
    }
  • 相关阅读:
    mybatis 版本问题
    sonar-maven-plugin问题
    spring容器&classLoader
    Mybatis知识点整理
    防重复提交的方式汇总
    秒杀系统设计整理
    MySQL事务隔离级别&锁
    disruptor解读
    springboot 2.x集成log4j2调试日志无法关闭问题
    Java并发——volatile
  • 原文地址:https://www.cnblogs.com/lightmonster/p/10657216.html
Copyright © 2011-2022 走看看