uva 10118,记忆化搜索
这个题debug了长达3个小时,acm我不能放弃,我又回来了的第一题!
一开始思路正确,写法不行,结果越改越乱
看了网上某神的代码,学习了一下
coding+debug:4小时左右,记忆化搜索+dp类型第一题
/*
* Author: Bingo
* Created Time: 2015/3/2 21:23:20
* File Name: uva10118.cpp
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <time.h>
using namespace std;
const int maxint = -1u>>;
int dp[][][][];
int a[][];
int f[];
int n;
int ans;
int ok(int i,int j,int p,int q){
int m[];
memset(m,,sizeof(m));
int top=;
for (int t=;t<i;t++)
m[top++]=a[][t];
for (int t=;t<j;t++)
m[top++]=a[][t];
for (int t=;t<p;t++)
m[top++]=a[][t];
for (int t=;t<q;t++)
m[top++]=a[][t];
sort(m,m+top);
int cnt=,tans=;
for (int t=;t<top;){
if (m[t]==m[t+]){
tans++;
t+=;
}else {
cnt++;
t++;
}
}
if (cnt<=){
ans=max(ans,tans);
return ;
}
return ;
}
int dfs(int i,int j,int p,int q){
if (i==n&&j==n&&p==n&&q==n) return ;
if (i<n){
i++;
if(ok(i,j,p,q)) {
if (dp[i][j][p][q]){
ans=max(ans,dp[i][j][p][q]);
dp[i][j][p][q]=ans;
}else {dp[i][j][p][q]=ans;dfs(i,j,p,q);}
}
}
if (j<n){
j++;
if(ok(i,j,p,q)) {
if (dp[i][j][p][q]){
ans=max(ans,dp[i][j][p][q]);
dp[i][j][p][q]=ans;
}else {dp[i][j][p][q]=ans;dfs(i,j,p,q);}
}
}
if (p<n){
p++;
if(ok(i,j,p,q)) {
if (dp[i][j][p][q]){
ans=max(ans,dp[i][j][p][q]);
dp[i][j][p][q]=ans;
}else {dp[i][j][p][q]=ans;dfs(i,j,p,q);}
}
}
if (q<n){
q++;
if(ok(i,j,p,q)) {
if (dp[i][j][p][q]){
ans=max(ans,dp[i][j][p][q]);
dp[i][j][p][q]=ans;
}else {dp[i][j][p][q]=ans;dfs(i,j,p,q);}
}
}
}
int main () {
while(cin>>n&&n){
for (int i=;i<n;i++) {
cin >> a[][i]>>a[][i]>>a[][i]>>a[][i];
}
memset(dp,,sizeof(dp));
ans=;
memset(f,,sizeof(f));
//ok(3,3,3,3);
dfs(,,,);
cout << ans<<endl;
}
return ;
}
uva 10118,记忆化搜索的更多相关文章
- UVa 10118 记忆化搜索 Free Candies
假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的. 所以就可以使用记忆化搜索. #include <cstdio> #include & ...
- uva 707(记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21261 思路:此题需要记忆化搜索,dp[x][y][t]表示当前状 ...
- UVa 10400 记忆化搜索
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> us ...
- Substring Uva 11468_记忆化搜索 + AC自动机
Code: #include<cstdio> #include<cstring> #include<queue> using namespace std; cons ...
- UVa 10118 Free Candies (记忆化搜索+哈希)
题意:有4堆糖果,每堆有n(最多40)个,有一个篮子,最多装5个糖果,我们每次只能从某一堆糖果里拿出一个糖果,如果篮子里有两个相同的糖果, 那么就可以把这两个(一对)糖果放进自己的口袋里,问最多能拿走 ...
- uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)
题目链接:uva 10581 - Partitioning for fun and profit 题目大意:给定m,n,k,将m分解成n份,然后依照每份的个数排定字典序,而且划分时要求ai−1≤ai, ...
- UVA - 10118Free Candies(记忆化搜索)
题目:UVA - 10118Free Candies(记忆化搜索) 题目大意:给你四堆糖果,每一个糖果都有颜色.每次你都仅仅能拿随意一堆最上面的糖果,放到自己的篮子里.假设有两个糖果颜色同样的话,就行 ...
- UVA - 10917 - Walk Through the Forest(最短路+记忆化搜索)
Problem UVA - 10917 - Walk Through the Forest Time Limit: 3000 mSec Problem Description Jimmy exp ...
- UVa 10285 Longest Run on a Snowboard - 记忆化搜索
记忆化搜索,完事... Code /** * UVa * Problem#10285 * Accepted * Time:0ms */ #include<iostream> #includ ...
随机推荐
- 201521123030 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4 ...
- 201521123030《Java程序设计》第5周学习总结
1. 本周学习总结 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 因为i在类中是priv ...
- 201521123071《java程序设计》第三周学习总结
1. 本周学习总结 这周主要学习了构造函数,类与对象,就是这周事情很多,还没来得及好好复习,所以有很多知识都没有认识透彻.但我会尽力补上的. http://images2015.cnblogs.com ...
- java 程序编写规则(自己总结)
1.命名规范 (1)所有的标示符都只能用ASCⅡ字母(A-Z或a-z).数字(0-9)和下划线"_". (2)类名是一个名词,采用大小写混合的方式,每个单词的首字母大写.例如:Us ...
- SpringMVC第七篇【RESTful支持、拦截器】
RESTful支持 我们在学习webservice的时候可能就听过RESTful这么一个名词,当时候与SOAP进行对比的-那么RESTful究竟是什么东东呢??? RESTful(Representa ...
- Java学习笔记三---unable to launch
环境配置好后,在eclipse下编写HelloWorld程序: ①创建新工程 ②创建.java文件,命名为HelloWorld ③在源文件中添加main方法,代码如下: public void mai ...
- 谈javascript变量声明
之前的面试中遇到过一道面试题 var a =10;(function(){ console.log(a); var a =20;})() 短短5行代码log的结果是什么? 如果把var a = 20; ...
- GCD之死锁体会
1.先看下几句代码 1 2 3 4 5 6 7 dispatch_queue_t serialqueue=dispatch_queue_create("serialqueue", ...
- 线段树初步__ZERO__.
线段树,顾名思义,就是指一个个线段组成的树. 线段树的定义就是: 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点.使用线段树可以快速的查找某 ...
- Qt学习之路MainWindow学习过程中的知识点
一.Qt的GUI程序有一个常用的顶层窗口,叫做MainWindow MainWindow继承自QMainWindow.QMainWindow窗口分成几个主要的区域: 二.QAction类 QAct ...