题目链接

题目大意:

有4堆糖果,每一堆有n个糖果,有一个篮子,这个篮子的最大容量为5块糖,每一次从这四堆中选择一堆,然后将最上面的糖果拿下来,放到篮子里面去,如果有相同两块糖的就把这;两块糖拿出来,如果达到了5块糖,并且这5块糖是两两不相同的就结束游戏,问你,最多能拿出多少对对对对糖

变形的记忆化搜索!!!

Code:

#include<iostream>
#include<cstdio>
#include<cstring>using namespace std;
const int maxn = 45;
int num[maxn][4];                     //存放输入的数字
int top[4];                           //现在每一堆拿到第几个了
int dp[maxn][maxn][maxn][maxn];       //递推,记录结果的数组
int vis[4*maxn];                      //记录篮子里有没有现在这个数字
int n;int DP(int k)
{int & ans = dp[top[0]][top[1]][top[2]][top[3]];if(ans != -1)   return ans;ans = 0;if(k >= 5)      return ans;         //篮子里面最多有5个,如果有5个不一样的就退出for(int i = 0; i < 4; i++){if(top[i] == n)  continue;      //这一堆已经全部都拿完了++top[i];if(vis[num[top[i]][i]]){           //在篮子里面有一样的vis[num[top[i]][i]] = false;   //把一样的拿出去ans = max(ans, DP(k-1)+1);     //  !!!!!vis[num[top[i]][i]] = true;    //恢复原样}else{vis[num[top[i]][i]] = true;ans = max(ans, DP(k+1));     //   !!!!vis[num[top[i]][i]] = false;}--top[i];}return ans;
}int main()
{while(scanf("%d", &n) && n){for(int i = 1; i <= n; i++){for(int j = 0; j < 4; j++)scanf("%d", &num[i][j]);}memset(top, 0, sizeof(top));memset(dp, -1, sizeof(dp));memset(vis, false, sizeof(vis));printf("%d\n", DP(0));}return 0;
}

怎么感觉记忆化搜索不怎么像DP里面的内容,倒是更像暴搜呐,剪枝的暴搜;

UVA 10118-Free Candies相关推荐

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

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

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

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

  3. uva 10118 Free Candies

    原题: Little Bob is playing a game. He wants to win some candies in it - as many as possible. There ar ...

  4. UVA - 10118 Free Candies

    题目链接:https://vjudge.net/problem/UVA-10118 Little Bob is playing a game. He wants to win some candies ...

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

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

  6. uva 10118 ——Free Candies

    题意:桌子上有4 堆糖果,要从这四堆糖果中取出5个,如果5个中有相同的颜色则把他们拿出来放到口袋,求最多放多少糖果. 思路:DAG最长路问题.需要把问题转化成DAG的问题,以个数作为转移的状态,当达到 ...

  7. UVA 10118 Free Candies

    UVA_10118 我们可以定义f[n1][n2][n3][n4]为当四个piles分别拿到第n1.n2.n3.n4个糖果时,能够拿回家的最多的pair数,然后在状态转移的时候需要借助一个数组来记录b ...

  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. Free Candies UVA - 10118

    题目:B - Free Candies UVA - 10118 题意: 桌上有4堆糖果,每堆糖果高度不超过40,每颗糖果有一种颜色(一共20种,1,2,3...,20), 有一个篮子,一开始是空的,每 ...

  10. uva 10118(DP)

    UVA 10118 题意: 有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果, 如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己 ...

最新文章

  1. JSP实现网上招标系统
  2. yolo v3学习笔记
  3. 【luogu】 P1880 石子合并
  4. Nacos(二)之概念
  5. 如何用Netty写一个高性能的分布式服务框架?
  6. 软件工程生命周期模型_软件生命周期模型比较| 软件工程
  7. 最聪明的如何成为优秀的——微软高管指点成材路
  8. 在pycharm运行正常,在命令行窗口出现引包错误
  9. python 框架是什么意思_Python框架有哪些?区别是什么?
  10. SVN 代码与文件管理小记
  11. springboot连接redis进行CRUD
  12. linux文件夹压缩与分卷压缩
  13. android仿QQ列表的效果实现
  14. python中执行py文件出错(提示File “stdin”,line 1,SyntaxError:invalid syntax)
  15. InsecureProgramming-master——abo2
  16. ChainZ Arena攻略+全红卡评分
  17. 新电脑win10系统的一个BUG
  18. 大数据存储基石——HDFS
  19. Python(一)为什么要学习Python
  20. Rosalind Python|Inferring mRNA from Protein

热门文章

  1. 【吐血整理】互联网大厂面试遇到的100道软件测试面试题+答案
  2. mapper-一对多,多对多等问题
  3. learning的反义词英文_英语同义词反义词
  4. html中列表前的序号用带圆圈的数字表示及存在的问题
  5. Skywalking环境搭建及demo实战
  6. matlab中的可变电阻怎么接,可调电阻器的接线方法
  7. 大学生必备的十大网站有哪些?
  8. 马化腾——中国IT巨头之一
  9. 如何在os x或ubuntu下安装最新的ruby
  10. 关于解决Photoshop CS5打开后出现已停止工作强制退出的问题