http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19440

题意,4堆不同颜色的糖果,每堆N个,从堆上往下拿,放入一个最大装5个糖果的篮子里,如果糖果颜色相同就能将这两个放入自己口袋,问最多能放多少

分析:dp[1][2][3][4]表示取每一堆的第1,2,3,4个的情况,top[i]表示第i堆该取的个数,记忆化搜索

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int MAX = 50;
int dp[MAX][MAX][MAX][MAX],has_color[MAX],pile[5][MAX],top[5];
int n;
int dfs(int cnt)
{if(dp[ top[1] ][ top[2] ][ top[3] ][ top[4] ] != -1)return dp[ top[1] ][ top[2] ][ top[3] ][ top[4] ];if(cnt == 5)  //如果已经取了5个,那就是0了return dp[ top[1] ][ top[2] ][ top[3] ][ top[4] ] = 0;int ans = 0;for(int i = 1; i <= 4; i++){if(top[i] > n)continue;int color = pile[i][ top[i] ];top[i] += 1; //下一个if(has_color[color]) //有一个跟这个颜色相同
        {has_color[color] = 0;ans = max(ans, dfs(cnt - 1) + 2);//篮子里还能装cnt-1个,把篮子里那个拿出来has_color[color] = 1;}else{has_color[color] = 1;ans = max(ans, dfs(cnt + 1));has_color[color] = 0;}top[i] -= 1;}return dp[ top[1] ][ top[2] ][ top[3] ][ top[4] ] = ans;
}
int main()
{while(scanf("%d", &n) != EOF && n){for(int i = 1; i <= n; i++){for(int j = 1; j <= 4; j++)scanf("%d", &pile[j][i]);}memset(has_color, 0, sizeof(has_color));memset(dp, -1, sizeof(dp));top[1] = top[2] = top[3] = top[4] = 1;printf("%d\n", dfs(0) / 2);//至于这里为什么除以2,以为dfs时暴力了所有假设 是 1 ,2,2,3那么以第二堆为top[2】时能拿两个,以第三堆为top[3]时也能拿两个
    }return 0;
}

转载于:https://www.cnblogs.com/zhaopAC/p/5104087.html

UVA10118(记忆化搜索 + 好题)相关推荐

  1. 22.11.30打卡 记忆化搜索2水题

    Function Run Fun 记忆化搜索模板题, 个人认为比滑雪还简单 需要注意的只有当数组下标为负数的时候需要特判一下 其余直接照抄题目就能过了 /* ⣿⣿⣿⣿⣿⣿⡷⣯⢿⣿⣷⣻⢯⣿⡽⣻⢿⣿⣿⣿⣿ ...

  2. 22.12.1打卡 漫步校园 记忆化搜索

    题目里很显然只走最短路, 直接用bfs从终点到起点搜一遍将每一步到终点所需要的最短的时间存在一个dis数组中, 然后你就会发现原来的地图变成了这样 上面是地图下面是dis数组, 再看看经典记忆化搜索模 ...

  3. 2017广东工业大学程序设计竞赛决赛 题解源码(A,数学解方程,B,贪心博弈,C,递归,D,水,E,贪心,面试题,F,贪心,枚举,LCA,G,dp,记忆化搜索,H,思维题)...

    心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起&qu ...

  4. 【蓝桥杯真题】地宫取宝(搜索-记忆化搜索详解)

    链接 [蓝桥杯][2014年第五届真题]地宫取宝 题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被 ...

  5. 巧用记忆化搜索代替暴力递归(洛谷P1464题题解,Java语言描述)

    题目要求 P1464题目链接 分析 如果--你信了这题干,真的写了递归--TLE警告!!! 所以,就需要优化嘛-- [−9223372036854775808,9223372036854775807] ...

  6. 第23次CSP认证 第4题 收集卡牌(记忆化搜索,状压)

    链接:http://118.190.20.162/view.page?gpid=T132 思路:先写一个暴力搜索,然后把中间结点的状态存起来,就是记忆化搜索,状态要存搜索到的层数和选择的卡牌数,0代表 ...

  7. [蓝桥杯][2014年第五届真题]地宫取宝(记忆化搜索)

    题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...

  8. [Leetcode][第322题][JAVA][零钱兑换][回溯][记忆化搜索][动态规划]

    [问题描述][中等] [解答思路] 1. 递归(超时) class Solution {int res = Integer.MAX_VALUE;public int coinChange(int[] ...

  9. [Leetcode][第312题][JAVA][戳气球][动态规划][记忆化搜索]

    [问题描述][困难] [解答思路] 1. 记忆化搜索 时间复杂度:O(n^3) 空间复杂度:O(n^2) class Solution {public int[][] rec;public int[] ...

最新文章

  1. 三、Netty的粘包半包问题解决
  2. 解决vmware移动虚拟机之后执行ifconfig命令无输出的问题
  3. mouted vue 操作dom_vue中关于dom的操作
  4. 如何使用Action.Invoke()触发一个Storyboard
  5. MONO Jexus部署最佳体验
  6. 按值传递和按引用传递的区别_c++按值、地址、引用传递参数
  7. 基于springBoot的社区信息管理系统
  8. 主板 B85 + 核显HD4600 , EFI 安装黑苹果
  9. ISO 3166-1 国家编码
  10. 车牌限行C语言雾霾指数,算法设计与程序实现判断车牌的单双号(背景知识)为了保障空气质量,减少雾霾,某市决定当空气污染严重时,实行汽车单双号限行,违反规定的车辆将予以处罚。如何让高清摄像-组卷网...
  11. 从外观来看微型计算机由哪几个部分组成,福师11春学期《计算机应用基础》在线作业一...
  12. python面试题 网络编程和并发(34道题)
  13. UVa 10387 - Billiard
  14. wav音频文件格式解析
  15. 学python最重要的是什么_学Python之前,什么最重要?
  16. Unity2D学习笔记Day14:靠近门时弹出对话框并播放录制动画
  17. 欧拉系统安装与部署NextCloud与常见部署问题解决以及数据盘迁移
  18. Scikit-Learn与 TensorFlow 机器学习实用指南 中文PDF 免费领取
  19. 基于微信小程序的二手汽车拍卖系统
  20. 发文章的期刊-山东省期刊

热门文章

  1. 1100. 校庆 (25 分)
  2. open cv均值 中值 高斯 双边高斯 滤波及模糊
  3. 云存储字体测试(字体链接7小时有效)
  4. 快收藏!最适合计算机大学生的Java毕业设计项目--音乐视频网站系统!
  5. 不同的声音-我为什么反对用Node
  6. 顺时针打印矩阵(旋转矩阵)
  7. MySQL忘记密码恢复密码的实现方法
  8. ubuntu 安装ATI驱动
  9. 【每日新闻】三星电子市值跌至全球第18位,落后中国阿里腾讯 | 中国AI领袖人物吴甘沙:无人驾驶技术距离我们已经不再遥远
  10. 如何做一个基于微信菜谱美食小程序系统毕业设计毕设作品