题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1059

题目大意:有四堆糖果,称矩阵排列,一共有n行,只能在每一堆的最上方取糖果,病放入篮子中,如果篮子中有相同的颜色的糖果则可以抵消,篮子中最多能盛放5个糖果,当篮子中的

糖果数量达到5个时,游戏结束。问最多能获得多少个糖果。

解法:由于每次都只能从每一堆的最上方取糖果,所以先开一个一维数组 用来记录每一堆取到了第几行,再开一个bool数组,用来判断该颜色的糖果有没有出现过。再开一个四维的数组用来记录该状态的最大能取回多少糖果。

#include<iostream>
#include<cstring>
using namespace std;
int n;
int arr[][];
bool pre[];
int dp[][][][];
int toal[]; int dfs(int x){ if(dp[toal[]][toal[]][toal[]][toal[]]!=-){
return dp[toal[]][toal[]][toal[]][toal[]];
}
if(x==) return ;
int ans=;
for(int i=;i<=;i++){
if(toal[i]==n+) continue ;
int color=arr[toal[i]][i];
if(pre[color]){
pre[color]=;
toal[i]++;
ans=max(ans,dfs(x-)+);//加一
toal[i]--;//回溯
pre[color]=;//回溯 }
else {
pre[color]=;
toal[i]++;
ans=max(ans,dfs(x+));//如果没有相同颜色的糖果,则不用加1
toal[i]--;
pre[color]=;
}
}
// cout<<ans<<endl;
return dp[toal[]][toal[]][toal[]][toal[]]=ans;
} int main(){
cin>>n;
for(int i = ;i<=n;i++)
for(int j=;j<=;j++){
cin>>arr[i][j];
}
memset(dp,-,sizeof(dp));
memset(pre,,sizeof(pre));
for(int i=;i<=;i++){
toal[i]=;
} cout<<dfs()<<endl;
return ;
}

总结:再写dfs的时候,如果定义为int类型,一定要先清楚,,返回值的意义。

最新文章

  1. Windows Phone 8.1又有什么新花样
  2. 神奇的margin之豆瓣豆瓣么么哒
  3. 纸上谈兵:AVL树
  4. Android SDK下载地址
  5. Java 时间转换问题总结
  6. MmSystem播放Wav格式声音
  7. Scrapy:python3下的第一次运行测试
  8. linux 学习之九、Linux 磁盘与文件系统管理(1)
  9. Umbraco Content属性
  10. django-cookieless 0.7 : Python Package Index
  11. don&#39;t touch your phone in any unfamiliar way(转)
  12. Node类型知识大全
  13. UVa11426 最大公约数之和(正版)
  14. Python扩展模块——自动化(testlinkAPI的使用)
  15. 树莓派3B+ HDMI连接显示屏 因供电问题而不能进入系统
  16. PaperBye-一个可以自动改重的免费论文查重网站
  17. Linux(centos 7)配置tomcat8、JDK1.8、lighttpd、ngnix、mysql
  18. 质控工具之cutadapt的使用方法
  19. swift - 快速代码块 - 创建 tableview等一些控件 基本属性
  20. JS算法之八皇后问题(回溯法)

热门文章

  1. mysql两表合并,对一列数据进行处理
  2. Mysql性能优化:什么是索引下推?
  3. TensorFlow RNN 教程和代码
  4. SVM | 支持向量机原理讲解(二)
  5. [Java8教程]Java8新特性进阶集合
  6. 一文搞懂 ThreadLocal 原理
  7. 「MoreThanJava」计算机发展史—从织布机到IBM
  8. 【cs224w】Lecture 1 &amp; 2 - 图的性质 及 随机图
  9. 四、【Docker笔记】Docker容器
  10. E - Fire! UVA - 11624(bfs + 记录火到达某个位置所需要的最小时间)