地址链接:https://www.acwing.com/problem/content/description/1214/
问题描述
问题分析
对于每一个位置,可以有行,列
两个属性,对于每一个位置,还会有走到当前位置已经选取了nn
个物品,对于所选的物品,又可以有所有物品的最大价值mm
。
const int N = 55, M = 15;
dp描述:intf[N][N][M][M]
;
意义:f[i][j][nn][mm]i,j
时 有nn
个物品,且最大价值为mm
的方案数
对于物品的价值,题目所给的范围为0-12
,那么当我们不选择一个物品的时候,他所带来的的价值就是0,这与选择0价值的物品所不符合。所以可以选择给物品的价值+1
,这样不选择一个物品,他的价值就可以是0,而选择一个物品的价值就变成了1-13
。
对于状态转移方程,这里引用yxc总的思路图(懒得画了,哈 )
程序实现
#include <iostream>
#include <cstring>
using namespace std;
const int N = 55, M = 15;
const int mod = 1e9 + 7;
int n,m,k;
// f[i][j][nn][mm] i,j 时 有nn个物品,且最大价值为mm 的方案数
int f[N][N][M][<