UVA - 10118 Free Candies 记忆化搜索
题目链接: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 记忆化搜索相关推荐
- uva 10118 - Free Candies(记忆化搜索)
题目大意:10118 - Free Candies 题目大意:有4堆糖果, 每堆糖果有n颗糖果,然后给出每颗糖果的类型1~20,然后只有取走当前堆的前面一颗糖果后才可以取后面的糖果, 然后小伙伴有一个 ...
- UVA - 10118 Free Candies 记忆化搜索经典
思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...
- uva 11762 数学期望+记忆化搜索
题目大意:给一个正整数N,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公 ...
- uva 11600 - Masud Rana(记忆化搜索)
题目链接:uva 11600 - Masud Rana 题目大意:给出n和m,表示说有n座城市,每两座城市间有一条路,每条路上都有怪物,现在有m条路上没有怪物,给出没有怪物的路.现在任选一座城市移过去 ...
- UVa 10118 记忆化搜索 Free Candies
假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的. 所以就可以使用记忆化搜索. 1 #include <cstdio> 2 #inclu ...
- 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个,当 ...
- UVA - 10118Free Candies(记忆化搜索)
题目:UVA - 10118Free Candies(记忆化搜索) 题目大意:给你四堆糖果,每个糖果都有颜色.每次你都只能拿任意一堆最上面的糖果,放到自己的篮子里.如果有两个糖果颜色相同的话,就可以将 ...
- 【UVA 437】The Tower of Babylon(记忆化搜索写法)
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- uva 707(记忆化搜索)
题意:在一个方阵中,一个强盗犯要逃跑.你是警察要去抓他,现在你手上有若干线索他们会告诉你第i时刻一个方阵中他们没有看见强盗.在t秒后全部道路会封锁.让你通过线索来判断是不是能够找到小偷在某一秒的位置. ...
最新文章
- Java实现HTTP文件下载(转)
- 对RESTful Web API的理解与设计思路
- 【更名通知】将以个人名义继续更新维护
- Python 操作 Elasticsearch 实现 增 删 改 查
- 飞机大战HTML5游戏源码,基于Canvas制作的网页版飞机大战游戏+飞机大战手机端
- 【Clickhouse】Clickhouse Cannot create table with column ‘Int256‘ because experimental bigint types
- [产品相关] A/B测试终极指南(翻译)
- Vue 过滤器filters
- 反射机制,类的加载机制,和注解的配置参数的结合使用详解
- html5适合安卓的字体,在安卓中切换h5页面中的字体
- error:crosses initialization of ...的解决办法
- 大学计算机教师招聘试讲什么,应聘高校教师面试,试讲注意事项
- dwz导出excel java_完美解决dataset导出excel问题
- Spring乱码问题解决
- Git使用小技巧【git reset和git revert, 你真的知道怎么用吗, 详细图解】
- HTML标签的连续的英文折断英文连续不换行英文字符溢出
- android 拍照申请权限,Android拍照6.0以上动态获取权限
- 项目管理-常见工具和技术总结
- 1553B不同版本驱动安装
- matplotlib画图使用python可视化colorbar工具自定义颜色
热门文章
- 浅谈小程序开源业务架构建设之路
- 【Java用法】@NotEmpty、@NotBlank、@NotNull注解的使用方法与区别
- 字符串逆序输出c语言,5、输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。...
- htonl,htons,ntohl,ntohs的详解
- error LNK1120: 1 个无法解析的外部命令。
- LNK1120: 一个无法解析的外部命令
- PE系统是什么?怎么进入PE重装电脑系统
- python公众号文章爬虫_Python爬虫爬取微信公众号历史文章全部链接
- python 修改图片尺寸_Python实现更改图片尺寸大小的方法(基于Pillow包)
- GitBlit(代码提交)