洛谷 P2690 [USACO04NOV] Apple Catching G

记忆化

#include <cstdio>      //头文件
#include <iostream>
#include <cstring>
using namespace std;
int T, w;
short a[1009];
int  f[1005][3][31]; //记忆化的三维数组记录dfs 
int dfs(int i,int j,int k) //i为时间点,j为哪棵树,k为移动了多少次
{
    if (i > T)return 0;//边界条件
    if (f[i][j][k] != -1)
		return f[i][j][k];   //如果搜过了就直接返回
    int tmp1 = 0, tmp2 = 0; //两种决策 移动或者不移动 
    if (k < w && a[i] != j) //最优化剪枝:如果在这个时间点里,当前位置会有果子落下,就不走
        tmp1 = dfs(i + 1, -1 * j + 3, k + 1) + 1;  //-1 * j + 3这里表示移动,你可以把1,2代进去算一下
    tmp2 = dfs(i + 1, j, k) + (j == a[i]); //移动 
    return f[i][j][k] = max(tmp1, tmp2);
}
int main()
{
    
    cin >>T>>w;
    for (int i = 1; i <= T; i++)
        cin >> a[i];
    memset(f, -1, sizeof(f));//初始化 
    cout << dfs(1, 1, 0); //开始从时间1,初始在第一棵树,移动次数 
}

 

posted @   浪矢-CL  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
历史上的今天:
2017-07-25 bzoj 1821 部落划分
2017-07-25 图论————最小生成树
2017-07-25 树上最短路
点击右上角即可分享
微信分享提示