UVA 10118

题意:

有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果,

如果篮子里有两个相同的糖果,那么就可以把这两个(一对)糖果放进自己的口袋里,问最多能拿走多少对糖果。糖果种类最多20种.

思路:记忆化搜索

Orz:在输入的时候不小心写错了,导致一直调试。感觉自己的函数并没有问题,纠结了好久。

找出问题时瞬间想si

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <vector>
#include <algorithm>
#include <functional> using namespace std;
const int maxn = 50;
int num[5];
int tmap[maxn][maxn];
int dp[maxn][maxn][maxn][maxn];
bool vis[25];
int n;
int fin(int all)
{
if(dp[num[1]][num[2]][num[3]][num[4]] != -1)
return dp[num[1]][num[2]][num[3]][num[4]];
if(all == 5)
return dp[num[1]][num[2]][num[3]][num[4]] = 0; int ans = 0;
for(int i= 1; i <= 4; i++)
{
if(num[i]> n)
continue; if(vis[tmap[i][num[i]]]) //若篮子里面已经有一个
{
vis[tmap[i][num[i]]] = false;
num[i]+=1;
ans = max(fin(all-1) + 1,ans);
num[i]-=1;
vis[tmap[i][num[i]]] = true;
}
else
{
vis[tmap[i][num[i]]] = true;
num[i]+=1;
ans = max(fin(all+1),ans);
num[i]-=1;
vis[tmap[i][num[i]]] = false; } }
return dp[num[1]][num[2]][num[3]][num[4]] =ans;
} int main()
{
while(scanf("%d",&n) && n)
{
for(int j = 1; j <= n; j++)
for(int i = 1; i <=4; i++)
scanf("%d",&tmap[i][j]);
num[1] = num[2] = num[3] = num[4] = 1;
memset(dp,-1,sizeof(dp));
memset(vis,false,sizeof(vis));
printf("%d\n",fin(0));
}
return 0;
}

  

uva 10118(DP)的更多相关文章

  1. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  2. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  3. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  4. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  5. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  6. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

  7. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

  8. Leetcode之动态规划(DP)专题-详解983. 最低票价(Minimum Cost For Tickets)

    Leetcode之动态规划(DP)专题-983. 最低票价(Minimum Cost For Tickets) 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的 ...

  9. 最长公共子序列长度(dp)

    /// 求两个字符串的最大公共子序列长度,最长公共子序列则并不要求连续,但要求前后顺序(dp) #include <bits/stdc++.h> using namespace std; ...

随机推荐

  1. 400多个开源项目以及43个优秀的Swift开源项目-Swift编程语言资料大合集

    Swift 基于C和Objective-C,是供iOS和OS X应用编程的全新语言,更加高效.现代.安全,可以提升应用性能,同时降低开发难度. Swift仍然处于beta测试的阶段,会在iOS 8发布 ...

  2. Java语言基础组成

    写完才发现,这个博客不提供目录这个功能,真是想骂爹了...... 目录 关键字 标识符 注释 常量和变量 运算符 语句 函数 数组 1.关键字 描述:刚刚开始学这个的时候,真是傻傻分不清楚,不过没关系 ...

  3. Hibernate之Hibernate的下载与安装

    Hibernate用法十分简单,当我们在Java项目中引入Hibernate框架之后,就能以面向对象的方式来操作关系数据库了. 下载: 登陆Hibernate官网,下载Hibernate压缩包,win ...

  4. Django-rest-framework源码分析----认证

    一.前言 1.1.安装 两种方式: github pip直接安装 pip install django-rest-framework 1.2.需要先了解的一些知识 理解下面两个知识点非常重要,djan ...

  5. Spring+Hibernate+Struts(SSH)框架整合

    SSH框架整合 前言:有人说,现在还是流行主流框架,SSM都出来很久了,更不要说SSH.我不以为然.现在许多公司所用的老项目还是ssh,如果改成流行框架,需要成本.比如金融IT这一块,数据库dao层还 ...

  6. zf框架的思想及学习总结

    在Php的配置文件中可以设置日志文件 dos命令进入文件夹,然后利用命令:>zf.bat create project d:/hspzf这样就可以在d盘进行创建项目文件了:然后需要把框架的Zen ...

  7. Hey,man,are you ok? -- 关于心跳、故障监测、lease机制

    电话之于短信.微信的一个很大的不同点在于,前者更加及时,有更快速直接的反馈:而后面两个虽然称之为instant message,但经常时发出去了就得等对方回复,等多久是不确定的.打电话能明确知道对方在 ...

  8. __all__

    相信很多人第一次见到这个__all__都很好奇,他有什么作用 那他到底有什么作用呢? 先上代码 from scrapy.utils.reqser import request_to_dict, req ...

  9. spring-oauth-server实践:OAuth2.0 通过header 传递 access_token 验证

    一.解析查找 access_token 1.OAuth2AuthenticationProcessingFilter.tokenExtractor 2.发现来源可以有两处:请求的头或者请求的参数 二. ...

  10. HTML初识

    HTML初识 web服务本质 import socket def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) so ...