递归转非递归

递归容易写,但是递归的深度容易受系统限制,如果没其他办法,只能改用栈来模拟递归

 

方法:通过保存变量入栈与出栈实现

 

如题:

 

排列小球

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:31            测试通过:9

描述

sub意外收到了一份礼物,是一大堆小球..准确地说,小球共有3种颜色:红黄白.sub决定从这些小球中选出n个来排成一列.如何使得这n个排成一排的小球看着顺眼,这是个问题..

   

对于连续放置的三个小球,sub都会定义一个舒适度”.比如他认为三个颜色分别为红红黄的小球连在一起,舒适度为12.

   

而对于全部n个小球,会有n-2个连续的三个小球.n-2个组合的舒适度之和,定义为整个序列的舒适度.现在sub想知道,整个序列的舒适度的最大值是多少.

 

    三个小球总共有27种摆法,舒适度分别为:

    红红红 4   红红白 12   红红黄 17

    红白红 11  红白白 22   红白黄 24

    红黄红 27  红黄白 37   红黄黄 30

    白红红 6   白红白 18   白红黄 21

    白白红 12  白白白 3    白白黄 16

    白黄红 19  白黄白 22   白黄黄 24

    黄红红 10  黄红白 13   黄红黄 7

   黄白红 6   黄白白 3    黄白黄 4

    黄黄红 7   黄黄白 15   黄黄黄 2

   

 

你可以认为,sub手里有无数小球,每个颜色都是.

 

突然天将画外音!Sub说,呃,这样的话万一暴力能做的话不久?了,于是乎,benSub说:“你加一点东东不就行了么。”,“加什么?”Sub问道。

于是ben就大胆的改起了题目。

听好下面是ben对题目的赘述。

呃,ben说我有特殊能力,我能给你额外的合适度,你愿意要么?

你不会告诉我你说你不愿意要吧?那也太扯了!

然后ben就叽里咕噜了半天,大概意思就是,如果你在第i个位置放球j的话,ben会给你额外的合适度。

 

输入

一个整数,n(5<=n<=100000),表示序列的长度。

接下来有n行,每行三个数。第i行分别表示在第i个位置放红、白、黄时,ben给你的附加合适度。

其他输入不超过40

 

输出

一个整数,表示舒适度的最大值。

 

样例输入

3
2 3 4
3 4 2
1 2 1

样例输出

43

 

 

这题用DP来做的,递归写深度达到100000,会堆栈溢出,当然有其他更好的DP方法,下边说下递归转非递归。。。

 

原来DFS递归:

 

 

 

 

把原来的递归改成非递归:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值