zoukankan      html  css  js  c++  java
  • 动态规划学习(一)

      动态规划算法通常基于一个递推公式以及一个或多个初始状态。当前子问题的解将由上一次子问题的解推出。使用动态规划来解决只需要多项式时间复杂度,因此比回溯法、暴力法要快很多。

      初始条件,中间状态,状态方程。

      有1元,3元(方便举例),5元的硬币,要拼凑n元,最少拿多少枚硬币。

      初始:dp[0]=0;

      状态方程:dp[i] = min(dp[i-1]+1,dp[i-3]+1,dp(i-5)+1)//i>=5;

           dp[i] = min{dp[i-vj]},其中i-vj>=0,vj表示第j个硬币的面值;

      

     1 #include <iostream>
     2 #include <vector>
     3 using namespace std;
     4 int min(int a, int b){
     5     return (a > b ? b : a);
     6 }
     7 int main(){
     8     int n;
     9     cin >> n;
    10     vector<int>dp(n + 1);
    11     dp[0] = 0;
    12     for (int i = 1; i <= n; i++){
    13         if (i < 3){
    14             dp[i] = dp[i - 1] + 1;
    15         }
    16         else if (i < 5){
    17             dp[i] = min(dp[i - 1], dp[i - 3]) + 1;
    18         }
    19         else
    20             dp[i] = min(dp[i - 1], min(dp[i - 3], dp[i - 5])) + 1;
    21     }
    22     return dp[n];
    23 }
  • 相关阅读:
    python redis
    Celery
    RabbitMQ
    python的文件锁操作
    cloud-init alibaba
    cloud-init tencent
    关于 python 的类
    jnija2模板渲染
    python multiprocessing
    学习html5的WebSocket连接
  • 原文地址:https://www.cnblogs.com/LaplaceAkuir/p/6264659.html
Copyright © 2011-2022 走看看