UVA10118(记忆化搜索 + 好题)
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19440
题意,4堆不同颜色的糖果,每堆N个,从堆上往下拿,放入一个最大装5个糖果的篮子里,如果糖果颜色相同就能将这两个放入自己口袋,问最多能放多少
分析:dp[1][2][3][4]表示取每一堆的第1,2,3,4个的情况,top[i]表示第i堆该取的个数,记忆化搜索
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int MAX = ;
int dp[MAX][MAX][MAX][MAX],has_color[MAX],pile[][MAX],top[];
int n;
int dfs(int cnt)
{
if(dp[ top[] ][ top[] ][ top[] ][ top[] ] != -)
return dp[ top[] ][ top[] ][ top[] ][ top[] ];
if(cnt == ) //如果已经取了5个,那就是0了
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(has_color[color]) //有一个跟这个颜色相同
{
has_color[color] = ;
ans = max(ans, dfs(cnt - ) + );//篮子里还能装cnt-1个,把篮子里那个拿出来
has_color[color] = ;
}
else
{
has_color[color] = ;
ans = max(ans, dfs(cnt + ));
has_color[color] = ;
}
top[i] -= ;
}
return dp[ top[] ][ top[] ][ top[] ][ top[] ] = ans;
}
int main()
{
while(scanf("%d", &n) != EOF && n)
{
for(int i = ; i <= n; i++)
{
for(int j = ; j <= ; j++)
scanf("%d", &pile[j][i]);
}
memset(has_color, , sizeof(has_color));
memset(dp, -, sizeof(dp));
top[] = top[] = top[] = top[] = ;
printf("%d\n", dfs() / );//至于这里为什么除以2,以为dfs时暴力了所有假设 是 1 ,2,2,3那么以第二堆为top[2】时能拿两个,以第三堆为top[3]时也能拿两个
}
return ;
}
UVA10118(记忆化搜索 + 好题)的更多相关文章
- poj1088(记忆化搜索入门题)
题目链接:http://poj.org/problem?id=1088 思路: 明显的记忆化搜索题,用dp[i][j]表示从(i,j)出发能滑的最远距离,用dfs搜索,若dp[x][y]>0即已 ...
- 记忆化搜索模板题---leetcode 1155. 掷骰子的N种方法
1155. 掷骰子的N种方法 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, ..., f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数 ...
- TSP+期望——lightoj1287记忆化搜索,好题!
感觉是很经典的题 记忆化时因为不好直接通过E判断某个状态是否已经求过,所以再加一个vis打标记即可 /*E[S][u]表示从u出发当前状态是S的期望*/ #include<bits/stdc++ ...
- vj1011:记忆化搜索
vj1011:记忆化搜索 这题就是很简单的记忆化搜索即可,和经典题目滑雪简直一模一样 对于记忆化搜索,我也是暑假看了ccy大神的题解才有所领悟的 其实也就是DFS+mark 主要的部分 int sea ...
- P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 记忆化搜索dfs
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- hdoj1078(介绍记忆化搜索及其模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 思路: 这是一道典型的记忆化搜索模板题. 先介绍记忆化搜索,本质是搜索+DP. 一般说来,动态规 ...
- 【bzoj4428】[Nwerc2015]Debugging调试 数论+记忆化搜索
题目描述 一个 $n$ 行的代码出了bug,每行都可能会产生这个bug.你要通过输出调试,在其中加入printf来判断bug出现的位置.运行一次程序的时间为 $r$ ,加入一条printf的时间为 $ ...
- POJ 1579 Function Run Fun 【记忆化搜索入门】
题目传送门:http://poj.org/problem?id=1579 Function Run Fun Time Limit: 1000MS Memory Limit: 10000K Tota ...
- 【题解】滑雪 luogu1434 记忆化搜索
记忆化搜索入门题 题目 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在 ...
随机推荐
- VS 2013 中如何自定义代码片段
1.菜单 工具->代码段管理器
- jQuery Mobile和Sencha Touch哪个更适合你?
纯粹的总结一下移动web开发框架,移动web开发框架有jQuery Mobile .Sencha Touch等等,他们都来源于web开发,是成熟的框架,jQuery Mobile出自于jQuery家族 ...
- ASP.NET错误处理的方式(总结)
转载至: http://www.cnblogs.com/chinhr/archive/2007/06/26/795947.html ASP.NET错误处理的方式(整理&总结)英文文章研究:ht ...
- 加密算法使用(四):AES的使用
AES是一种对称加密方式,比DES更为安全,用一个秘钥加密数据之后,可以用同一个秘钥对加密后的数据解密还原,以下是一套以字符串为例子的使用全过程演示, 用到了 commons-codec.jar pa ...
- C++创建对象的两种方式
C++创建对象有两种方式,在栈上创建对象(Objects on the Stack)和在堆上创建对象(Objects on the Heap). 假设我们有以下的类: #include <str ...
- Java系列: JAVA字符串格式化-String.format()的使用(zz)
常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重 ...
- Linux 读书笔记 二
一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 若不小心登出后,直接刷新页面即可 2. 环境使用 完成实验后可以点击桌面上方的“实验截图”保存并分 ...
- windows7设置java的环境变量
win7 下配置 java 环境变量 首先,你应该已经安装了 java 的 JDK 了,笔者安装的是:jdk-7u7-windows-x64 接下来主要讲怎么配置 java 的环境变量,也是为了以 ...
- libtool: Version mismatch error 解决
在编译一个软件的时候,在 ./configure 和 make 之后可能会出现如下错误: libtool: Version mismatch error. This is libtool 2.4. ...
- this,this,再次讨论javascript中的this,超全面
至于js中this这个东西,好多淫解释过了,看起来好高端的样子,不造你看懂了木有? 先引用比较高端的,“汤姆大叔“ 的,yes this 好了,下面加上鄙人比较挫的解释 论点: this 不是变量,不 ...