博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDOJ 1244 记忆搜索
阅读量:6330 次
发布时间:2019-06-22

本文共 1715 字,大约阅读时间需要 5 分钟。

第一次,只用了简单地深搜,超时。于是自然就想到记忆搜索,用了就过啦。

ints是一维数组,保存所有数字。segs是一位数组,保存所有数段的长度。

ans是二维数组。ans[i][j]保存以第i个数字开始(但第i个数字不一定被取到,只是从第i个数字开始考虑),计算j,j+1...m段数段之和的最大值。本题要求的便是ans[1][1]。

ans[i][j]=max{sum+ans[i+segs[j]][j+1],ans[i+1][j]}。max{}中的两个数的区别就在于,是否以第i个数作为第j个数段的起始数字。

#include 
using namespace std;const int N = 1005;const int M = 25;int ans[N][M],segs[M],ints[N];int n,m;int DFS(int posInt,int posSeg){ if (ans[posInt][posSeg] != -1) return ans[posInt][posSeg]; //已经用完了n个数 或 分完m个数段了 if (posSeg > m || posInt > n) { ans[posInt][posSeg] = 0; return ans[posInt][posSeg]; } //判断,即使取了posInt位置的数,能不能取完余下的数段 int remainedInts = n - posInt + 1; int remainedSegs = 0; for (int i = posSeg;i <= m;i ++) remainedSegs += segs[i]; //余下的数段的长度之和比余下的数字的个数还大 if (remainedSegs > remainedInts) { ans[posInt][posSeg] = 0; return ans[posInt][posSeg]; } //若能走到这一步,说明posInt位置的数可以不作为第posSeg个数段的起始数字 int max; //以第posInt个数为起始,取seg[posSeg]个连续的数的和 int sum = 0; for (int i = posInt;i < posInt + segs[posSeg];i ++) sum += ints[i]; max = sum + DFS(posInt + segs[posSeg],posSeg + 1); //以第posInt + 1个数为起始,取seg[posSeg]个连续的数的和 int temp = DFS(posInt + 1,posSeg); max = max > temp ? max : temp; ans[posInt][posSeg] = max; return ans[posInt][posSeg];}int main (){ while (scanf("%d",&n) != -1 && n != 0) { memset(ans,-1,sizeof(ans)); scanf("%d",&m); for (int i = 1;i <= m;i ++) scanf("%d",&segs[i]); for (int i = 1;i <= n;i ++) scanf("%d",&ints[i]); printf("%d\n",DFS(1,1)); } return 0;}

转载于:https://www.cnblogs.com/peaceful-andy/archive/2012/08/14/2638907.html

你可能感兴趣的文章
usermod 命令、mkpasswd命令及用户密码管理
查看>>
Python学习,还在用正则或者bs4做爬虫吗?来试试css选择器吧
查看>>
windows系统redis sentinel 集群搭建
查看>>
Qt5开发及实例学习之标准字体对话框类QFontDialog:选择字体设置文本编辑器
查看>>
gdb常用命令
查看>>
如何从请求、传输、渲染3个方面提升Web前端性能
查看>>
java基础:基本类型占用字节数
查看>>
条形码设计软件BarTender实用教程——模板对象常见问题解答
查看>>
(五)java spring cloud版b2b2c社交电商spring cloud分布式微服务-路由网关(zuul)
查看>>
23种设计模式知识要点,你都了解了吗?
查看>>
给awstats增加纯真IP库qqwry.dat支持
查看>>
PhalApi-RabbitMQ基于PhalApi专业队列拓展
查看>>
ubuntu12.04--无法获得锁 /var/lib/dpkg/lock - open (1...
查看>>
git冲突 head
查看>>
OSChina 周二乱弹 —— 啥时候能低调的炫个富?
查看>>
OSChina 周五乱弹 —— 吃货的自我修养
查看>>
OSChina 周六乱弹 —— 为啥你没对象
查看>>
OSChina 周六乱弹 —— 生命诚可贵,啤酒价更高
查看>>
今天晚上同事出现这个问题 Eclipse 中 Tomcat启动卡100%(preparing launch delegate...)...
查看>>
jquery中的 $(#id)与document.getElementById( id )的区别
查看>>