动态规划,递归求n的阶乘递归调用实现, 三角形数字问题,北大POJ,动态规划解决01背包问题

总结:

1.找到dp[][][][],决定的数组定位具体情况,一个[]对应一个递归式子;

2.从初始值找特殊情况;

3.从初始值找递推式子(自上而下)或者从最后找关系(自下而上);

4.构造main函数给初始条件。一般好似cin得到。

https://blog.csdn.net/xyyxyyx/article/details/81122485(纸牌问题,DP)

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int N = 25;
int n, a[N], b[N], ans;
int f[N][N][N][N];

int DFS(int la, int ra, int lb, int rb)
{
    if (f[la][ra][lb][rb] != -1) return f[la][ra][lb][rb];
    int tmp;
    if (la > ra && lb > rb)
        return 0;
    if ((ra-la+rb-lb)%2 == 0){   //表示先拿牌的人的得分,要求最大
        tmp = 0;
        if (la <= ra){
            tmp = max(tmp, DFS(la+1, ra, lb, rb)+a[la]);
            tmp = ma

猜你喜欢

转载自blog.csdn.net/qq_38998213/article/details/103301659
今日推荐