取数问题(区间dp入门)
QWQ
题目描述
有一排N个数,你和小明2个人玩游戏,每个人轮流从2端取数,每次可以从左或右取,不能从中间取。你取的所有的数的和是你的得分,小明取的所有的数的和是小明的得分。如果你先取,你最多比小明多得多少分?
输入
第一行:一个整数n,范围在[0, 100]。
第二行:n个整数,每个数范围在[1, 10000]
输出
小明足够聪明时,你最多多得的分数。
样例输入
4
3 2 9 1
样例输出
9
【样例解释】:
第1轮你取3;
第2轮他取2;
第1轮你取9;
第3轮他取1;
(3+9)-(2+1) = 9
老规矩,分析一下题目。
我们每次只能从左边取数或右边取数,不能从中间取数。
有些人就想说了,那我直接用贪心求哪个数大不就好了?这题也太水了吧。
有这思想的小盆友是错的,如果你不信我来举个栗子(QWQ)
4
1 2 100 10
a[1] a[2] a[3] a[4]
来吧,分析一下。
贪心思维:
第一轮我选a[4](因为a[4]>a[1])
小明选a[3](因为a[3]>a[2])
第一轮我选a[2](因为a[2]>a[1])
小明选a[1]
小明:a[1]+a[3]=101
我:a[4]+a[2]=12
这一看就是我亏了啊!!!
所以贪心思维是不可行的,我们应该换一种。
区间DP思维:
假如我选了a[1],那么小明就只能选a[2]或a[4]。
同理,
我们先开一个二维数组 f f f,用j模拟起点,i模拟长度。
定义