https://vjudge.net/problem/UVA-10118

题意:

桌上有4堆糖果,每堆有N颗。佳佳有一个最多可以装5颗糖的小篮子。他每次选择一堆糖果,把最顶上的一颗拿到篮子里。如果篮子里有两颗颜色相同的糖果,佳佳就把它们从篮子里拿出来放到自己的口袋里。如果篮子满了而里面又没有相同颜色的糖果,游戏结束。

思路:

怎么判断糖果是否颜色相同是本题的一个重点,看了别人的思路后明白了用哈希是很好的办法。

因为一共只有20颗种类的糖果,所以只需要一个20大小的数组来判断糖果是否出现过。

top[5]数组用来标记每堆糖果所拿的个数。

 1 #include<iostream>
 2 #include<string>
 3 #include<cstring>
 4 #include<sstream>
 5 #include<algorithm>
 6 using namespace std;
 7
 8 const int maxn = 45;
 9
10 int n;
11 int c[4][maxn];
12 int d[maxn][maxn][maxn][maxn];
13 int top[5];
14 bool Hash[25];
15
16
17 int dp(int cur)
18 {
19     int& ans = d[top[0]][top[1]][top[2]][top[3]];
20     if (ans)  return ans;
21     if (cur == 5)  return 0;   //篮子满了
22     for (int i = 0; i < 4; i++)
23     {
24         if (top[i] == n)  continue;   //已经取完
25         int x = c[i][top[i]++];
26         if (Hash[x] == true)
27         {
28             Hash[x] = false;
29             ans = max(ans, dp(cur - 1) + 1);
30             Hash[x] = true;
31         }
32         else
33         {
34             Hash[x] = true;
35             ans = max(ans, dp(cur + 1));
36             Hash[x] = false;
37         }
38         top[i]--;
39     }
40     return ans;
41 }
42
43 int main()
44 {
45     //freopen("D:\\txt.txt", "r", stdin);
46     while (cin >> n && n)
47     {
48         memset(d, 0, sizeof(d));
49         memset(top, 0, sizeof(top));
50         memset(Hash, false, sizeof(Hash));
51         for (int i = 0; i < n;i++)
52         for (int j = 0; j < 4; j++)
53             cin >> c[j][i];
54         cout << dp(0) << endl;
55     }
56     return 0;
57 }

转载于:https://www.cnblogs.com/zyb993963526/p/6377949.html

UVa 10118 免费糖果(记忆化搜索+哈希)相关推荐

  1. uva 10118 - Free Candies(记忆化搜索)

    题目大意:10118 - Free Candies 题目大意:有4堆糖果, 每堆糖果有n颗糖果,然后给出每颗糖果的类型1~20,然后只有取走当前堆的前面一颗糖果后才可以取后面的糖果, 然后小伙伴有一个 ...

  2. UVA - 10118 Free Candies 记忆化搜索

    题目链接:UVA - 10118 题目是PDF就不贴了,大意就是有四堆糖果,每堆有n个,有个人有个能盛五个糖的篮子,每次可以任选一堆糖,取最上面的那个放到篮子里,如果篮子里有两个颜色相同的,就可以把这 ...

  3. UVA - 10118 Free Candies 记忆化搜索经典

    思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...

  4. UVA - 10118Free Candies(记忆化搜索)

    题目:UVA - 10118Free Candies(记忆化搜索) 题目大意:给你四堆糖果,每个糖果都有颜色.每次你都只能拿任意一堆最上面的糖果,放到自己的篮子里.如果有两个糖果颜色相同的话,就可以将 ...

  5. uva 11762 数学期望+记忆化搜索

    题目大意:给一个正整数N,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公 ...

  6. uva 11600 - Masud Rana(记忆化搜索)

    题目链接:uva 11600 - Masud Rana 题目大意:给出n和m,表示说有n座城市,每两座城市间有一条路,每条路上都有怪物,现在有m条路上没有怪物,给出没有怪物的路.现在任选一座城市移过去 ...

  7. UVa 10118 记忆化搜索 Free Candies

    假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的. 所以就可以使用记忆化搜索. 1 #include <cstdio> 2 #inclu ...

  8. UVA - 10118 Free Candies(记忆化搜索/状压)

    传送门 方法一 一开始我确实是这样想的,设d[i][j][k][p][S]d[i][j][k][p][S]d[i][j][k][p][S]为四堆分别拿了i,j,k,pi,j,k,pi,j,k,p个,当 ...

  9. 【UVA 437】The Tower of Babylon(记忆化搜索写法)

    [题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

最新文章

  1. SAP CAR integration with S/4 HANA
  2. 每个程序员都必须知道的8种数据结构
  3. HTML中常用的实体字符
  4. 阿里巴巴分布式事务利器Seata环境准备
  5. redis核心技术与实战(四)高可用高扩展篇
  6. 码农30岁后的体检——你最需要的是直面的勇气
  7. 珍藏40个android应用源码分享
  8. 17 任务调度相关类综述——Live555源码阅读(一)任务调度相关类
  9. Matlab Tricks(一)—— figure(1)
  10. EasyAndroid基础集成组件库之:EasyReflect 优雅的反射功能库
  11. python学习日记(OOP——静态方法和类方法)
  12. flume学习(十):如何使用Spooling Directory Source
  13. 金融分析与风险管理——期权BSM模型
  14. VINS-Mono 论文公式推导与代码解析
  15. mysql表字段一定要写英文吗_关于数据库列名是否必须是英文的?
  16. Android 音视频开发(二):使用 AudioRecord 采集音频PCM并保存到文件(学习笔记)
  17. windows编程学习——1 关闭窗口不退出
  18. Cadence 计算器使用——settling time
  19. jquery dataTable 参数详解
  20. 通用型系统架构层次图

热门文章

  1. MYSQL连接出现Auth,使用navicat连接 mysql时出现client does not support auth...upgrading Mysql Client...
  2. java中设置http响应头控制浏览器禁止缓存当前文档内容
  3. c语言 万年历问题,【数组函数面试题】面试问题:万年历的C语言… - 看准网
  4. java十六进制与字符串_JAVA十六进制与字符串的转换方法
  5. redis一般用来干嘛_谈谈redis的热key问题如何解决
  6. 用python将word文档导入数据库_python读取word文档,插入mysql数据库实例
  7. 首都师范大学计算机科学与技术考研分数线,2017考研:计算机科学与技术专业考研院校推荐之首都师范...
  8. oracle导出数据带where,CSS_指定一个where条件来有条件地导出记录,在Oracle数据库中,exp中的query - phpStudy...
  9. oracle into 循环,oracle游标中使用select into查询结果为NULL导致异常提前退出循环——菜鸟解决办法(^_^)...
  10. 前景检测算法(十二)--基于模糊Choquet积分