引言
- 今天应该是舟车劳顿的一天,头一次在机场刷题,不学习新的东西了,就复习一些之前学习的算法了。
复习
二维背包问题——宠物小精灵之收服
以往的分析链接
个人实现
- 这是第二次在做这道题,这是一个单纯的二维背包问题,需要理清楚最后是要你输出什么类型,先给20分钟在开发网站上尝试一下,然后在来具体分析。
#include <iostream>
#include <cstring>
#include <limits.h>
using namespace std;
const int N = 1010,M = 550,K = 110;// 其中的N表示的精灵球的数量,M是体力值,K是野生精灵的数量
int nt[K],mt[K];
int f[K][N][M];
int n,m,k;
int main(){
cin>>n>>m>>k;
for(int i = 1;i <= k;i ++){
cin>>nt[i]>>mt[i];
}
// 二维背包问题计算状态转移矩阵变化的
int res = f[k][n][m-1];
for(int i = 1;i <= k;i ++){
// 针对第i个物体,只有判定抓或者不抓两种情况
for(int j = 0;j <= n;j ++){
// 遍历合法情况下的精灵球数量
for(int l = 0 ;l <= m - 1;l ++){
// 遍历合法情况下的体力值,注意上下确界,体力值不能消耗完
// 两种情况,抓或者是不抓,对应需要处理边界值的情况
if (j-nt[i] >= 0 && l-mt[i] >= 0)
f[i][j][l] = max(f[i