uva 10118】的更多相关文章

UVA 10118 题意: 有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果, 如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己的口袋里,问最多能拿走多少对糖果.糖果种类最多20种. 思路:记忆化搜索 Orz:在输入的时候不小心写错了,导致一直调试.感觉自己的函数并没有问题,纠结了好久. 找出问题时瞬间想si #include <iostream> #include <cstdio> #include <…
题目链接:https://uva.onlinejudge.org/external/101/10118.pdf 参考:http://www.cnblogs.com/kedebug/archive/2013/04/07/3006493.html 刚开始,我想到了dp状态的描叙,d(a,b,c,d) 从 4堆里面拿走 a,b,c,d 的最优值,但是好难实现啊,dp顺序感觉是可以用LCS的方案,但是,怎么保存自己口袋里面有哪些呢? ——hash. 最后参考了一下大神的方案,记忆化写的,Orz. 嗯,像…
10118 - Free Candies Time limit: 30.000 seconds Little Bob is playing a game. He wants to win some candies in it - as many as possible.There are 4 piles, each pile contains N candies. Bob is given a basket which can hold at most 5candies. Each time,…
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1059 题目大意:有四堆糖果,称矩阵排列,一共有n行,只能在每一堆的最上方取糖果,病放入篮子中,如果篮子中有相同的颜色的糖果则可以抵消,篮子中最多能盛放5个糖果,当篮子中的 糖果数量达到5个时,游戏结束.问最多能获得多少个糖果. 解法:由于每次都只能从每一堆的最上方取糖果,所以先开…
这个题debug了长达3个小时,acm我不能放弃,我又回来了的第一题! 一开始思路正确,写法不行,结果越改越乱 看了网上某神的代码,学习了一下 coding+debug:4小时左右,记忆化搜索+dp类型第一题 /* * Author: Bingo * Created Time: 2015/3/2 21:23:20 * File Name: uva10118.cpp */ #include <iostream> #include <cstdio> #include <cstdl…
思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取,最后篮子中剩余的糖果颜色和个数都是一样的.那么一旦搜索到一个已经被搜索过得状态,直接返回即可,没必要继续搜索.   AC代码: #include<cstdio> #include<algorithm> #include<cstring> #include<utilit…
https://vjudge.net/problem/UVA-10118 题目 桌上有4堆糖果,每堆有$N$($N\leqslant 40$)颗.有个熊孩子拿了个可以装5颗糖的篮子,开始玩无聊的装糖游戏.他每次选一堆糖,并把这堆最上面的糖装进篮子里面,如果篮子里有两个种类相同的糖,那么他就把这两个糖装进自己的口袋里.给出四堆糖中每一颗糖的种类(1..20),问最多能装多少对糖. 题解 一开始看这题,拿糖的顺序有$\mathcal{O}(P(4^40,40))$种,一下就茫然了(估计得太松了……)…
https://vjudge.net/problem/UVA-10118 题意: 桌上有4堆糖果,每堆有N颗.佳佳有一个最多可以装5颗糖的小篮子.他每次选择一堆糖果,把最顶上的一颗拿到篮子里.如果篮子里有两颗颜色相同的糖果,佳佳就把它们从篮子里拿出来放到自己的口袋里.如果篮子满了而里面又没有相同颜色的糖果,游戏结束. 思路: 怎么判断糖果是否颜色相同是本题的一个重点,看了别人的思路后明白了用哈希是很好的办法. 因为一共只有20颗种类的糖果,所以只需要一个20大小的数组来判断糖果是否出现过. to…
题意:有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果,如果篮子里有两个相同的糖果, 那么就可以把这两个(一对)糖果放进自己的口袋里,问最多能拿走多少对糖果. 析:首先看到的是时间30s,这么长时间,一想应该是暴力了吧,后来一想应该是记忆化搜索,既然这么长时间,应该得优化一下,不然可能超时, 但是数据好像挺水,才运行了60ms,并不知道是怎么回事,接下来说说这个题,用 d[a,b,c,d] 来表示 分别从 第一,二,三,四堆拿的最多糖果, 如…
假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的. 所以就可以使用记忆化搜索. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ; ; int n; int candy[maxn][maxm]; int d[maxn][maxn][maxn][maxn]; struct State { int tot; //篮…