UVA - 10118 Free Candies 递归记忆化搜索

该博客分析了UVA 10118题目的解决方案,即在四堆糖果中,每次取一个放入容量为5的篮子,当有两个同色糖果时可拿走一对,目标是最大化拿走的糖果对数。通过使用递归记忆化搜索策略,博主探讨了状态dp[a][b][c][d]表示已取走不同数量糖果时的最大糖果对数,指出无需记录篮子中糖果状态,直接计算最佳结果。
摘要由CSDN通过智能技术生成

问题

问题是给四个糖果堆(高度为n,n<=40),每次可以从任意一个堆的顶部取一个糖果放在容量为5的篮子中,若篮子中有两个颜色相同,就可以拿走,求最多可以拿走多少个糖果对

分析

状态是dp[a][b][c][d],a,b,c,d分别是从四个堆中拿走的的糖果个数,dp[0][0][0][0]是还没取的时候,可以得到的最多糖果对数量,dp[a][b][c][d]是已经取了a,b,c,d的时候还能够继续拿到的最大糖果数量
本题的思路有点类似于上一题(最长路),不过状态维度稍微多了点,有一点要注意的:不用加入篮子里的糖果数量作为一个维度,而是直接把它计算出来

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=42;
int piles[4][maxn],n,dp[maxn][maxn][maxn][maxn],cnt[21],kase=1;

int DFS(int *num,int bas){
   
    int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值