UVA 10118 Free Candies
UVA_10118
我们可以定义f[n1][n2][n3][n4]为当四个piles分别拿到第n1、n2、n3、n4个糖果时,能够拿回家的最多的pair数,然后在状态转移的时候需要借助一个数组来记录basket的情况,可以容易想象的是,对于一个f状态,一定有唯一一个basket的状况(当然假设能取走的糖果都取走了)与之相对应。
为了实现起来更方便,我还是选用了记忆化搜索。
#include<stdio.h>#include<string.h>#define MAXD 50int N, f[MAXD][MAXD][MAXD][MAXD], x[5][MAXD];int init(){int i, j; scanf("%d", &N);if(!N)return 0;for(i = 0; i < N; i ++)for(j = 0; j < 4; j ++) scanf("%d", &x[j][i]);return 1;}int dp(int y[], int s, int t[]){int i, j, k, max = 0;if(f[t[0]][t[1]][t[2]][t[3]] != -1)return f[t[0]][t[1]][t[2]][t[3]];if(s == 5)return f[t[0]][t[1]][t[2]][t[3]] = 0;for(i = 0; i < 4; i ++)if(t[i] != N) {int r[25]; memcpy(r, y, sizeof(r));int top[5]; memcpy(top, t, sizeof(top)); top[i] ++;if(r[x[i][t[i]]]) { r[x[i][t[i]]] = 0; k = dp(r, s - 1, top);if(k + 1 > max) max = k + 1; }else { r[x[i][t[i]]] = 1; k = dp(r, s + 1, top);if(k > max) max = k; } }return f[t[0]][t[1]][t[2]][t[3]] = max;}void solve(){int res, r[25] = {0}, top[5] = {0}; memset(f, -1, sizeof(f)); res = dp(r, 0, top); printf("%d\n", res);}int main(){while(init()) solve();return 0;}
UVA 10118 Free Candies相关推荐
- UVA - 10118 Free Candies 记忆化搜索
题目链接:UVA - 10118 题目是PDF就不贴了,大意就是有四堆糖果,每堆有n个,有个人有个能盛五个糖的篮子,每次可以任选一堆糖,取最上面的那个放到篮子里,如果篮子里有两个颜色相同的,就可以把这 ...
- uva 10118 - Free Candies(记忆化搜索)
题目大意:10118 - Free Candies 题目大意:有4堆糖果, 每堆糖果有n颗糖果,然后给出每颗糖果的类型1~20,然后只有取走当前堆的前面一颗糖果后才可以取后面的糖果, 然后小伙伴有一个 ...
- uva 10118 Free Candies
原题: Little Bob is playing a game. He wants to win some candies in it - as many as possible. There ar ...
- UVA - 10118 Free Candies
题目链接:https://vjudge.net/problem/UVA-10118 Little Bob is playing a game. He wants to win some candies ...
- UVA - 10118 Free Candies 记忆化搜索经典
思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...
- uva 10118 ——Free Candies
题意:桌子上有4 堆糖果,要从这四堆糖果中取出5个,如果5个中有相同的颜色则把他们拿出来放到口袋,求最多放多少糖果. 思路:DAG最长路问题.需要把问题转化成DAG的问题,以个数作为转移的状态,当达到 ...
- 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个,当 ...
- Free Candies UVA - 10118
题目:B - Free Candies UVA - 10118 题意: 桌上有4堆糖果,每堆糖果高度不超过40,每颗糖果有一种颜色(一共20种,1,2,3...,20), 有一个篮子,一开始是空的,每 ...
- uva 10118(DP)
UVA 10118 题意: 有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果, 如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己 ...
最新文章
- 单继承--多态性 多继承--二义性 ambiguous
- python 调用摄像头拍照_《自拍教程67》Python调用摄像头, 拍照拍照!
- elasticsearch聚合操作——本质就是针对搜索后的结果使用桶bucket(允许嵌套)进行group by,统计下分组结果,包括min/max/avg...
- MySql通用二进制版本在Linux(Ubuntu)下安装与开启服务
- mysql 1045 登录失败
- 前端---JavaScript基础3
- 机器学习(一)—— 线性回归
- B. Box Fitting
- LeetCode 1101. 彼此熟识的最早时间(排序+并查集)
- 源码分析 | 深度解密Go语言之context
- c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)
- SQL Server 日期和时间函数
- zookeeper在hadoop的应用
- java sort方法_Java排序方法sort用法详解
- 多个值合并成一个字段oracle排序,Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)...
- java object 转 double_Java 类型转换以及Object转成其他类型
- Oracle 常用脚本之查看视图、序列、存储过程、触发器、同义词、计划任务等信息
- 华为手机照片如何出现时间地点天气,教你30秒,一学就会
- 京东网页(动态)搭建,利用jquery实现
- 生成对抗网络(GAN)详细介绍及数字手写体生成应用仿真(附代码)
热门文章
- 自动化测试工具selenium 之Selenium-IDE
- [Web Chart系列之一(续)]Web端图形绘制SVG,VML, HTML5 Canvas 简单实例
- oracle安装完成后怎么这么多用户和表,下面哪个用户不是oracle缺省安装后就存在的用户...
- java下载好怎么验证_Java JDK下载、安装和验证
- jdk自带压测工具_jstack性能分析工具
- MATLAB图像处理之图像边缘提取
- MySQL中的索引使用
- Activiti中databaseSchemaUpdate属性取值
- MySQL性能优化一
- JDK8新特性LocalDate、LocalTime和LocalDateTime