题目链接:UVA - 10118

题目是PDF就不贴了,大意就是有四堆糖果,每堆有n个,有个人有个能盛五个糖的篮子,每次可以任选一堆糖,取最上面的那个放到篮子里,如果篮子里有两个颜色相同的,就可以把这两个放到口袋里,篮子满了并且没有相同糖果的时候游戏结束,求他最多能拿到的糖果数。这道题的状态是每堆分别拿num个时,口袋里最多能有多少个糖,dp[num1][num2][num3][num4],也就是第一堆拿num1个,第二堆拿num2个.....时口袋里的糖数,每次循环尝试拿第i堆糖果的第num个,递归求解,初始状态为0,0,0,0. 这道题时限3s,我跑了差不多2s  = = ,看了一下别人的都是用数组记录某种糖是否在篮子里出现过,我是用的set,每次都需要插入删除,大概时间是差在这里了、

#include <cstdio>
#include <iostream>
#include <set>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 45;
int c[4][maxn],n,dp[maxn][maxn][maxn][maxn],num[4];
set<int > s;
int solve(set<int > s){if(dp[num[0]][num[1]][num[2]][num[3]]!=-1) return dp[num[0]][num[1]][num[2]][num[3]];if(s.size()==5) return dp[num[0]][num[1]][num[2]][num[3]]=0;int ans=0;for(int i=0;i<4;i++){if(num[i]==n) continue;num[i]++;if(s.count(c[i][num[i]])){s.erase(c[i][num[i]]);ans=max(ans,solve(s)+1);s.insert(c[i][num[i]]);}else {s.insert(c[i][num[i]]);ans=max(ans,solve(s));s.erase(c[i][num[i]]);}num[i]--;}return dp[num[0]][num[1]][num[2]][num[3]]=ans;
}
int main() {while(~scanf("%d",&n)&&n){memset(dp,-1,sizeof(dp));memset(num,0,sizeof(num));s.clear();for(int i=1;i<=n;i++)for(int j=0;j<4;j++)scanf("%d",&c[j][i]);printf("%d\n",solve(s));}return 0;
}

吐个槽,DP对我来说感觉真的是,比其他的东西要难学的多。。= = 希望能在题目中有所收获,就像教主说的 至少混个脸熟不是,哇哈哈哈。加油加油

UVA - 10118 Free Candies 记忆化搜索相关推荐

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

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

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

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

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

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

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

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

  5. UVa 10118 记忆化搜索 Free Candies

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

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

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

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

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

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

  9. uva 707(记忆化搜索)

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

最新文章

  1. Java实现HTTP文件下载(转)
  2. 对RESTful Web API的理解与设计思路
  3. 【更名通知】将以个人名义继续更新维护
  4. Python 操作 Elasticsearch 实现 增 删 改 查
  5. 飞机大战HTML5游戏源码,基于Canvas制作的网页版飞机大战游戏+飞机大战手机端
  6. 【Clickhouse】Clickhouse Cannot create table with column ‘Int256‘ because experimental bigint types
  7. [产品相关] A/B测试终极指南(翻译)
  8. Vue 过滤器filters
  9. 反射机制,类的加载机制,和注解的配置参数的结合使用详解
  10. html5适合安卓的字体,在安卓中切换h5页面中的字体
  11. error:crosses initialization of ...的解决办法
  12. 大学计算机教师招聘试讲什么,应聘高校教师面试,试讲注意事项
  13. dwz导出excel java_完美解决dataset导出excel问题
  14. Spring乱码问题解决
  15. Git使用小技巧【git reset和git revert, 你真的知道怎么用吗, 详细图解】
  16. HTML标签的连续的英文折断英文连续不换行英文字符溢出
  17. android 拍照申请权限,Android拍照6.0以上动态获取权限
  18. 项目管理-常见工具和技术总结
  19. 1553B不同版本驱动安装
  20. matplotlib画图使用python可视化colorbar工具自定义颜色

热门文章

  1. 浅谈小程序开源业务架构建设之路
  2. 【Java用法】@NotEmpty、@NotBlank、@NotNull注解的使用方法与区别
  3. 字符串逆序输出c语言,5、输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。...
  4. htonl,htons,ntohl,ntohs的详解
  5. error LNK1120: 1 个无法解析的外部命令。
  6. LNK1120: 一个无法解析的外部命令
  7. PE系统是什么?怎么进入PE重装电脑系统
  8. python公众号文章爬虫_Python爬虫爬取微信公众号历史文章全部链接
  9. python 修改图片尺寸_Python实现更改图片尺寸大小的方法(基于Pillow包)
  10. GitBlit(代码提交)