总结:
1.找到dp[][][][],决定的数组定位具体情况,一个[]对应一个递归式子;
2.从初始值找特殊情况;
3.从初始值找递推式子(自上而下)或者从最后找关系(自下而上);
4.构造main函数给初始条件。一般好似cin得到。
https://blog.csdn.net/xyyxyyx/article/details/81122485(纸牌问题,DP)
#include
#include
#include
#include
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){ //表示先拿牌的人的得分,要求最大
tm