动态规划

动态规划(DP),说白了就是递归中间项之间会有互相影响,由于动态规划是从递归得来的,所以动态规划也需要一个递归出口。一般就是要求最优解,比如求最大数字啊,最短路程啊,最XXX啊,一般就是动态规划了

比如经典的斐波那契数列,已知f(1)和f(2),f(n)慢慢推出来

 

接下来开始

1.

灰色为时间段,红色是对应金钱,求如何得到最多金钱。

方法:选 / 不选

OPT(i)=max(   选:v(i)+OPT(prev(i))       ,     不选:OPT(i-1)   )

代码不打了,思想就这个思想,最后return 一个max就好了。

 

2.

从{1,2,4,1,7,8,3 }中选数字,,使得选出的数字结果加起来最大,但不能同时选相邻的数字。(如果是要写到OJ里面,最好还是放到数组里面最递归,不要纯递归不然会复杂度爆炸的)

#include <stdio.h>
#include <stdlib.h>

int max(int a,int b){
    if (a>b) return a;
    else return b;
}

int rec_opt(int arr[],int i){
    int A,B;
    if(i==0){
        return arr[0];
    }
    else if (i==1){
        return max(arr[0],arr[1]);
    }
    else{
         A= rec_opt(arr,i-2)+arr[i];
         B= rec_opt(arr,i-1);
    }
    return max(A,B);
}


int main(){
    int arr[]= {1,2,4,1,7,8,3};
    printf("%d",rec_opt(arr,7));
    return 0;
}

以上文字均为本人对B站Up主 正月点灯笼的视频做的笔记,仅用于自学笔记用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值