题意:有四根管道,每根里面有n颗糖,每次只能从管道的最上面拿糖进篮子里。如果篮子里面有两颗颜色一样的糖(数值大小一样),那么Bob可以将这两颗糖揣进自己的口袋里,如果篮子里的糖数为5颗,就结束。问Bob最多能拿到几颗糖

思路:将每根管道拿出的糖数num[1],num[2],num[3],num[4]作为一种状态,求解该状态下还能拿多少颗糖

留了一个疑惑在返回和输出的地方_(:з」∠)_

#include<iostream>
#include<stdlib.h>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=50;
int in[25];          //颜色i是否在篮子里
int dp[N][N][N][N]; //四个管道分别选了前i,j,k,l个糖时还能取的腰包里最大糖数
int a[N][4];
int top[4];         //top[i]记录第i个管道在选第几颗糖
int n;
int dfs(int cnt)    //求每个状态下还能选的糖的最大值   cnt表示篮子里面有cnt颗糖
{int &ans=dp[top[0]][top[1]][top[2]][top[3]];if(ans!=-1) return ans;if(cnt==5) return ans=0;ans=0;for(int i=0;i<4;++i){if(top[i]==n) continue;int color=a[top[i]++][i];if(in[color]){in[color]=0;            //已经有这个颜色了,那么我要把它拿出来ans=max(ans,dfs(cnt-1)+1);//因为拿出来了,所以篮子里糖数减少了1in[color]=1;            //回溯}else{in[color]=1;ans=max(ans,dfs(cnt+1));//放进去了一颗,篮子里糖数增加1in[color]=0;}top[i]--;}return dp[top[0]][top[1]][top[2]][top[3]]=ans;  //为啥我直接返回ans,输出答案的时候输出dp[0][0][0][0]就不对??}
int main()
{while(cin>>n){if(!n) break;memset(in,0,sizeof(in));memset(dp,-1,sizeof(dp));       //初始化为该状态未计算过memset(top,0,sizeof(top));for(int i=0;i<n;++i)for(int j=0;j<4;++j){cin>>a[i][j];}cout<<dfs(0)<<endl;}
}

【记忆化搜索】UVA 10118 free candy相关推荐

  1. UVa 10118 记忆化搜索 Free Candies

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

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

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

  3. 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个,当 ...

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

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

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

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

  6. uva 707(记忆化搜索)

    题意:在一个方阵中,一个强盗犯要逃跑.你是警察要去抓他,现在你手上有若干线索他们会告诉你第i时刻一个方阵中他们没有看见强盗.在t秒后全部道路会封锁.让你通过线索来判断是不是能够找到小偷在某一秒的位置. ...

  7. UVa 1629 切蛋糕(记忆化搜索)

    https://vjudge.net/problem/UVA-1629 题意: 有一个n行m列的网格蛋糕上有一些樱桃.每次可以用一刀沿着网格线把蛋糕切成两块,并且只能直切不能拐弯.要求最后每一块蛋糕上 ...

  8. UVA - 10253 Series-Parallel Networks(递推式、记忆化搜索写法)

    题目:UVA-10253 题目翻译(来自蓝书): 串并联网络有两个端点,一个叫源,一个叫汇,递归定义如下: (1) 一条单独的边是串并联网络. (2) 若G1和G2是串并联网络,把它们的源和源接在一起 ...

  9. UVA - 11361 Investigating Div-Sum Property(数位dp/记忆化搜索板子)

    题目:https://vjudge.net/problem/UVA-11361 思路:数位dp,用记忆化搜索写,dp[pos][i][j][limit] 代表剩余有pos位,每位上的数字和模k 等于i ...

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

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

最新文章

  1. python工作技巧_Python常用小技巧汇总
  2. 在keil中使用头文件实现多文件编程
  3. Spring Boot 集成数据库
  4. 044-PHP获得多个类对应的反射信息
  5. sprint boot_Sprint Boot子战争包装
  6. 什么叫有效物理网卡_如何区分虚拟网卡和物理网卡?-阿里云开发者社区
  7. python 表名代码编码格式_14行代码示例讲解:教你解决python上传图片限制格式问题...
  8. 液晶屏和计算机组成,液晶显示屏结构是什么 液晶显示屏结构介绍【图文】
  9. matlab--sum函数用法
  10. iOS 中 UIView 和 CALayer 的关系
  11. Windows Server 2008 RemoteApp(五)---远程桌面Web访问
  12. 【无人机】【2005.12】低雷诺数无人机的螺旋桨性能测量
  13. SQL中对一张表同时升序和降序的排序要求
  14. Debian下的搜狗拼音安装个人心得
  15. 关于IMDB,-------Internet Movie Database(互联网电影数据库)
  16. php面试题目(中等水平)
  17. 解决【VS/VC】中文乱码问题-5种解决办法
  18. Python案例:围棋的状态数
  19. mysql主从复制mmm_MMM+MYSQL主从同步
  20. Python批量压缩图片

热门文章

  1. 前面的可以显示位置国旗,后面的可显示地区和线路
  2. 业务系统如何集成工作流引擎?
  3. 【Android测试】Android 应用测试总结
  4. OpenGL---GLUT教程(六) GLUT场景漫游
  5. 25款专业的 WordPress 电子商务网站主题
  6. 计算机电池的性能参数,【戴尔灵越3567笔记本电脑使用总结】体积|电池|性能_摘要频道_什么值得买...
  7. Qt打开图片,维持原宽高比,适应窗口
  8. c#窗体编辑个人简历_编辑个人简历求职简历
  9. 3G入门教程--通讯基础
  10. JVM-04.垃圾回收机制