Uva 10118 免费糖果
题目链接: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.
嗯,像这种状态转移比较难写的,还是用搜索的思想好一点。
#include <bits/stdc++.h>
using namespace std; const int Maxn = ;
int pile[][Maxn];
int dp[Maxn][Maxn][Maxn][Maxn];
int n,top[]; int dfs(int count,bool hash[]) {
if(dp[top[]][top[]][top[]][top[]]!=-)
return dp[top[]][top[]][top[]][top[]];
if(count==)
return dp[top[]][top[]][top[]][top[]] = ; int ans = ;
for(int i=;i<;i++) {
if(top[i]==n) continue;
int color = pile[i][top[i]];
top[i]+=;
if(hash[color]) {
hash[color] = false;
ans = max(ans,dfs(count-,hash)+);
hash[color] = true;
}
else {
hash[color] = true;
ans = max(ans,dfs(count+,hash));
hash[color] = false;
}
top[i]-=;
}
return dp[top[]][top[]][top[]][top[]] = ans; } int main()
{ while(scanf("%d",&n),n)
{
for(int i=; i<n; i++)
for(int j=; j<; j++)
scanf("%d",&pile[j][i]); bool hash[];
memset(dp,-,sizeof(dp));
memset(hash,false,sizeof(hash)); top[] = top[] = top[] = top[] = ;
printf("%d\n",dfs(,hash)); }
return ;
}
Uva 10118 免费糖果的更多相关文章
- UVa 10118 免费糖果(记忆化搜索+哈希)
https://vjudge.net/problem/UVA-10118 题意: 桌上有4堆糖果,每堆有N颗.佳佳有一个最多可以装5颗糖的小篮子.他每次选择一堆糖果,把最顶上的一颗拿到篮子里.如果篮子 ...
- uva 10118(DP)
UVA 10118 题意: 有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果, 如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己 ...
- UVA - 10118 Free Candies(免费糖果)(dp---记忆化搜索)
题意:桌上有4堆糖果,每堆有N(N<=40)颗.佳佳有一个最多可以装5颗糖的小篮子.他每次选择一堆糖果,把最顶上的一颗拿到篮子里.如果篮子里有两颗颜色相同的糖果,佳佳就把它们从篮子里拿出来放到自 ...
- D - Free Candies UVA - 10118
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- uva 10118
10118 - Free Candies Time limit: 30.000 seconds Little Bob is playing a game. He wants to win some c ...
- UVA - 10118 Free Candies 记忆化搜索经典
思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...
- UVA 10118 Free Candies
https://vjudge.net/problem/UVA-10118 题目 桌上有4堆糖果,每堆有$N$($N\leqslant 40$)颗.有个熊孩子拿了个可以装5颗糖的篮子,开始玩无聊的装糖游 ...
- UVa 10118 Free Candies (记忆化搜索+哈希)
题意:有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果,如果篮子里有两个相同的糖果, 那么就可以把这两个(一对)糖果放进自己的口袋里,问最多能拿走 ...
- UVa 10118 记忆化搜索 Free Candies
假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的. 所以就可以使用记忆化搜索. #include <cstdio> #include & ...
随机推荐
- [转]Chrome 控制台console的用法
Chrome 控制台console的用法 下面我们来看看console里面具体提供了哪些方法可以供我们平时调试时使用. 目前控制台方法和属性有: ["$$", "$x&q ...
- AngulaJS实战总结, 带你进入AngularJS世界(待续)
使用AngularJS 进行Hybrid App 开发已经有一年多时间了,这里做一个总结. 一.AngularJS 初始化加载流程 1.浏览器载入HTML,然后把它解析成DOM.2.浏览器载入ang ...
- URAL 1876 Centipede's Morning(数学)
A centipede has 40 left feet and 40 right feet. It keeps a left slippers and b right slippers under ...
- 也不知怎么了LVS.SH找不到,网上搜了一篇环境搭配CENTOS下面的高可用 参考
系统环境: ************************************************************ 两台服务器都装了 CentOS-5.2-x86_64 系统 Vir ...
- struts_20_对Action中所有方法、某一个方法进行输入校验(基于XML配置方式实现输入校验)
第01步:导包 第02步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app ...
- 开发系统时候运行程序突然报出“WebDev.WebServer40.exe已停止工作”的错误
已经解决,问题描述:在开发系统时候运行程序突然报出“WebDev.WebServer40.exe已停止工作”的错误,程序调试运行,发现程序在打开数据库时候报错,也就是Connection.Open() ...
- Power Gating的设计(概述)
Leakage power随着CMOS电路工艺进程,功耗越来越大. Power Domain的开关一般通过硬件中的timer和系统层次的功耗管理软件来进行控制,需要在一下几方面做trade-off: ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON HWindowX 01
zw版[转发·台湾nvp系列Delphi例程]HALCON HWindowX 01 procedure TForm1.Button1Click(Sender: TObject);var img : H ...
- 集成Spring事物管理
什么是事物 事物是访问数据库的一个操作序列,数据库应用系统通过事物集来完成对数据库的存取.事物的正确执行使得数据库从一种状态转换为另一种状态. 事物必须服从ISO/IEC所制定的ACID原则.ACID ...
- HDU4288:Coder(线段树单点更新版 && 暴力版)
Problem Description In mathematics and computer science, an algorithm describes a set of procedures ...