Pascal 取数描述 Description 给出长度为N的数列{A_i},每次可以从最左边或者最右边取走一个数,第i
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/10 08:45:16
Pascal 取数
描述 Description
给出长度为N的数列{A_i},每次可以从最左边或者最右边取走一个数,第i次取数得到的价值是i * A_j.求价值之和最大的取数方案.
输入格式 Input Format
第一行,一个整数,表示数列长度N.
接下来N行,每行一个整数,表示数列A_i.
输出格式 Output Format
一个整数,表示最大的价值之和.
样例输入
5
1
3
1
5
2
样例输出
43
描述 Description
给出长度为N的数列{A_i},每次可以从最左边或者最右边取走一个数,第i次取数得到的价值是i * A_j.求价值之和最大的取数方案.
输入格式 Input Format
第一行,一个整数,表示数列长度N.
接下来N行,每行一个整数,表示数列A_i.
输出格式 Output Format
一个整数,表示最大的价值之和.
样例输入
5
1
3
1
5
2
样例输出
43
就是一个很简单的dp题.
var
n,m,i,j,k,t,s,d:longint;
a:array[0..2001] of longint;
f:array[-2..2001,-2..2001] of longint;
function max(p,q:longint):longint;
begin
if p>q then
exit(p)
else
exit(q);
end;
begin
readln(n);
for i:=1 to n do
readln(a[i]);
fillchar(f,sizeof(f),0);
for i:=1 to n do
for j:=n downto i-1 do
f[i,j]:=max(f[i,j+1]+(i-1+n-j)*a[j+1],f[i-1,j]+(i-j+n-1)*a[i-1]);
for i:=1 to n do
if s
var
n,m,i,j,k,t,s,d:longint;
a:array[0..2001] of longint;
f:array[-2..2001,-2..2001] of longint;
function max(p,q:longint):longint;
begin
if p>q then
exit(p)
else
exit(q);
end;
begin
readln(n);
for i:=1 to n do
readln(a[i]);
fillchar(f,sizeof(f),0);
for i:=1 to n do
for j:=n downto i-1 do
f[i,j]:=max(f[i,j+1]+(i-1+n-j)*a[j+1],f[i-1,j]+(i-j+n-1)*a[i-1]);
for i:=1 to n do
if s
Pascal 取数描述 Description 给出长度为N的数列{A_i},每次可以从最左边或者最右边取走一个数,第i
C语言:数列的移动给定一个长度为N的连续数列,给M次操作,每次操作给定一个数K,要求把当前数列中的第K个数移动到数列最前
观察下面的数阵,容易看出,第n行最右边的数是n^2,那么第20行最左边的数是几?
观察右边的数阵,容易看出,第n行最右边的数为n²
有两堆火柴,第一堆20根,第二堆25根,甲乙二人轮流从中取火柴,每次可以从任一堆中取走任意数量的火柴,取走最
从3,13,17,29,31这五个自然数中每次取两个数分别作业一个分数的分子分母一共可以组成多少个最简分数
编写一个函数digit(n,k),它把数n从右边起的第k位数字的值给出来,其中n为正整数,若n的位数不足k,则函数返回
给出一个数列4,7,10,13,16,19,22...,问这个数列的第n项是什么?pascal
从1、3、9、27、81、243、六个数中,每次取一个或者取几个不同的数求和(每个数只能取一次),可以得到一个新数,这样
一个数去掉最右边一位是40去掉最左边一位是13
pascal程序 定义一函数digit(n,k) 使得他回送整数n的从右边开始数第k个数字的值
观察下面的数阵.(1)第6行最后一个数为多少?(2)第m行最后一个数为多少?(3)第10行最左边的数是几?(4)第10行