题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1514

题目意思:有4堆糖果,每堆糖果有n个,从上到下排好,取糖果只能从上往下取,取完的糖果放在篮子里,篮子里最多放5个,如果篮子里有两个颜色相同的糖果则可以取走放进口袋里,问最多能取走多少对糖果放进口袋。n<=40, 糖果颜色最多20种。

这题是抄这个人滴:http://fudq.blog.163.com/blog/static/1913502382014239225290/

有些地方看得不太懂,本来想搜状态压缩DP来体会下的,阴差阳错、迷迷糊糊找到了这题= =.......可能水平不太够啦,先留着吧.......能理解到的我都写注释了,不能理解的打了个“?”

只能说,DP好抽象啊,泪 >_< ,慢慢来吧,继续努力!!!

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <set>
using namespace std; const int candy_num = + ;
const int basket_num = + ; // dp[i][j][k][l]: 四个糖堆分别拿走了几个
// 第1个pile被取走i个,第2个pile被取走j个,第3个pile被取走k个,第4个pile被取走l个时pocket能装入的candy数
// h[i]:记录第i个糖堆被取走了多少糖果
int dp[candy_num][candy_num][candy_num][candy_num];
int h[basket_num], f[candy_num][basket_num];
int ans, n; set<int> S;
set<int> ::iterator it; int check(int a)
{
it = S.find(a);
if (it != S.end()) // basket里面有颜色跟当前颜色(a)相同的糖果,从basket里拿出
{
S.erase(a);
return ;
}
S.insert(a); // basket中没有a这种颜色,放入basket中
return ;
} int dfs(int tmp)
{
if (dp[h[]][h[]][h[]][h[]] != -) // 这个状态搜过
return dp[h[]][h[]][h[]][h[]];
int tt = ;
for (int i = ; i < ; i++) // 从四个basket中拿糖果
{
if (h[i] < n && S.size() < )
{
int t = check(f[h[i]][i]);
if (S.size() < )
{
h[i]++; // 第i个pile里被取走一个candy
tt = max(tt, dfs(tmp+t)); // ?
h[i]--;
}
tt = max(tt, tmp+t); // ?
if (t == )
S.insert(f[h[i]][i]);
else
S.erase(f[h[i]][i]);
}
}
return dp[h[]][h[]][h[]][h[]] = tt;
} int main()
{
while (scanf("%d", &n) != EOF && n)
{
for (int i = ; i < n; i++)
{
for (int j = ; j < ; j++)
scanf("%d", &f[i][j]);
}
/* for (int i = 0; i < n; i++)
{
for (int j = 0; j < 4; j++)
printf("f[%d][%d] = %d\n", i, j, f[i][j]);
}
*/
ans = ;
h[] = h[] = h[] = h[] = ;
memset(dp, -, sizeof(dp));
printf("%d\n", dfs());
// printf("dp[%d][%d][%d][%d] = %d\n", h[0], h[1], h[2], h[3], dp[h[0]][h[1]][h[2]][h[3]]);
}
return ;
}

hdu 1514 Free Candies 解题报告的更多相关文章

  1. HDU 4303 Hourai Jeweled 解题报告

    HDU 4303 Hourai Jeweled 解题报告 评测地址: http://acm.hdu.edu.cn/showproblem.php?pid=4303 评测地址: https://xoj. ...

  2. hdu 2544 最短路 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目意思:给出 n 个路口和 m 条路,每一条路需要 c 分钟走过.问从路口 1 到路口 n 需 ...

  3. 【LeetCode】575. Distribute Candies 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 题目地址:ht ...

  4. ACM 杭电HDU 2084 数塔 [解题报告]

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  5. hdu 1972.Printer Queue 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1972 题目意思:需要模拟打印机打印.打印机里面有一些 job,每个job被赋予1-9的其中一个值,越大 ...

  6. hdu 1014.Uniform Generator 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1014 题目意思:给出 STEP 和 MOD,然后根据这个公式:seed(x+1) = [seed(x) ...

  7. hdu 1098 Lowest Bit 解题报告

    题目链接:http://code.hdu.edu.cn/game/entry/problem/show.php?chapterid=1&sectionid=2&problemid=22 ...

  8. hdu 1232 畅通工程 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 并查集入门题.最近在学并查集,它无非包括三个操作:make_set(x).union_set(x ...

  9. hdu 1050 Moving Tables 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 这道题目隔了很久才做出来的.一开始把判断走廊有重叠的算法都想错了.以为重叠只要满足,下一次mov ...

随机推荐

  1. PXC小结

    PXC使用到的端口号 3306 数据库对外服务的端口号(视具体情况而定) 4444 请求SST SST: 指数据一个镜象传输 xtrabackup , rsync ,mysqldump  4567 : ...

  2. R语言入门视频笔记--10--数据挖掘

    这里来挖掘超市购物车数据. 名词: 1.挖掘数据集:购物篮数据 2.挖掘目标:关联规则 3.关联规则:牛奶=>鸡蛋[支持度=2%,置信度=60%] 4.指出度:分析中的全部事务的2%同时购买了牛 ...

  3. Day 13 Python 一之helloworld

    直接肝程序吧! """ # 作业六:用户登录测试(三次机会) count = 1 while count <= 3: user = input('请输入用户名: ' ...

  4. hdu1853/ hdu 3488 有向图,取k个圈覆盖所有点一次//费用流

    哎╮(╯▽╰)╭,这是费用流基础题型,拆点,建二分图,跑最小费用最大流即可.若最大流为n,则说明是最大匹配为n,所有点都参与,每个点的入度和出度又是1,所以就是环. 弱菜还需努力! #include& ...

  5. Crypto另外两段加密解密的代码

    第一段代码风格-平铺直叙: import sys from Crypto.Cipher import AES from binascii import b2a_hex, a2b_hex class p ...

  6. 超级强大的淘宝开源平台(taobao-code)

    今天发现了一个免费又高级的开源SVN服务器,taobao,阿里云CODE.迫不及待的注册了一个.感觉不错,分享给大家. 先说说我们用过的几个SVN服务器吧: google code oksvn(感觉不 ...

  7. android开发教程之使用线程实现视图平滑滚动示例

    最近一直想做下拉刷新的效果,琢磨了好久,才走到通过onTouch方法把整个视图往下拉的步骤,接下来就是能拉下来,松开手要能滑回去啊.网上看了好久,没有找到详细的下拉刷新的例子,只有自己慢慢琢磨了.昨天 ...

  8. BUPT 2012复试机考 1T

    题目描述 大家都知道,数据在计算机里中存储是以二进制的形式存储的. 有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的. 你能帮帮 ...

  9. 天下文章一大抄 之 修改excel 创建时间

    Sub ChangeDate()ThisWorkbook.BuiltinDocumentProperties("Creation Date") = #2 28 2016 13:25 ...

  10. XSS学习分支图

    转载请注明出处:http://blog.csdn.net/cym492224103 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2 ...