CODEVS 2102 石子归并 2

【题目描述 Descriptin】

在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。
试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.

【输入描述 Input Description】
数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数.

输出描述 Output Description
输出共2行,第1行为最小得分,第2行为最大得分.

【样例输入 Sample Input】
4
4 4 5 9

【样例输出 Sample Output】

43
54

【解题思路】

经典环形DP,公式大家都懂,最后寻找最大值从f[1,n],f[2,n+1]……等中找

 1 program StongUnion;
 2 var
 3 f1,f2:array[0..100,0..100] of longint;
 4 a,s:array[0..100] of longint;
 5 i,j,p,k,n,ans1,ans2:Longint;
 6 begin
 7     read(n);
 8     for i:=1 to n do
 9     begin
10         read(a[i]);
11         s[i]:=s[i-1]+a[i];
12         a[i+n]:=a[i];
13     end;
14     for i:=n+1 to 2*n do
15     s[i]:=s[i-1]+a[i];
16
17     for p:=1 to n-1 do
18         for i:=1 to n*2-p do
19         begin
20             j:=i+p;
21             f1[i,j]:=maxint;;
22             f2[i,j]:=0;
23             for k:=i to j-1 do
24             begin
25                 if f1[i,j]>f1[i,k]+f1[k+1,j] then
26                 f1[i,j]:=f1[i,k]+f1[k+1,j];
27                 if f2[i,j]<f2[i,k]+f2[k+1,j] then
28                 f2[i,j]:=f2[i,k]+f2[k+1,j];
29             end;
30             f1[i,j]:=f1[i,j]+s[j]-s[i-1];
31             f2[i,j]:=f2[i,j]+s[j]-s[i-1];
32         end;
33         ans1:=maxlongint div 2;
34         ans2:=-1;
35         for i:=1 to n do
36         begin
37             if f1[i,n+i-1]<ans1 then ans1:=f1[i,n+i-1];
38             if f2[i,n+i-1]>ans2 then ans2:=f2[i,n+i-1];
39         end;
40         writeln(ans1);
41         writeln(ans2);
42 end.
时间: 2024-11-07 23:38:02

CODEVS 2102 石子归并 2的相关文章

codevs 2102 石子归并2

传送门 2102 石子归并 2 时间限制: 10 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. 输入描述 Input Description 数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的

codevs——2102 石子归并 2(区间DP)

时间限制: 10 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. 输入描述 Input Description 数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数. 输出

2102 石子归并 2

2102 石子归并 2 时间限制: 10 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. 输入描述 Input Description 数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个

codevs 1048石子归并

传送门 1048 石子归并 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达到最小. 输入描述 Input Description 第一行一个整数n(n<=100) 第二行n个整数w1,w2...wn  (wi <= 100) 输出描述 Output

CODEVS 1048 石子归并 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:http://codevs.cn/problem/1048/ 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达到最小. 输入描述 Input Description 第一行一个整数n(n<=100) 第二行n个整数w1,w2...wn  (wi <=

codevs——1048 石子归并 (区间DP)

时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达到最小. 输入描述 Input Description 第一行一个整数n(n<=100) 第二行n个整数w1,w2...wn  (wi <= 100) 输出描述 Output Descriptio

codevs——T1048 石子归并

 http://codevs.cn/problem/1048/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达到最小. 输入描述 Input Description 第一行一个整数n(n<=100) 第二行n个整数w1,w2...wn  (wi

2102 石子归并 2codevs

题目描述 Description 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. 输入描述 Input Description 数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数. 输出描述 Output Description 输出共2行,第1行为最小得分,第2行为最大得分. 样例输入

codevs 1048 石子归并

题目描述 Description 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1].问安排怎样的合并顺序,能够使得总合并代价达到最小. 输入描述 Input Description 第一行一个整数n(n<=100) 第二行n个整数w1,w2...wn  (wi <= 100) 输出描述 Output Description 一个整数表示最小合并代价 样例输入 Sample Input 4 4 1 1 4 样