石子合并问题
来源:互联网 发布:网络最火的手游 编辑:程序博客网 时间:2024/06/07 01:30
石子合并问题
Time Limit:1000MS Memory Limit:65536K
Total Submit:135 Accepted:54
Description
在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。
编程任务:
对于给定n堆石子,编程计算合并成一堆的最小得分和最大得分。
Input
输入包括多组测试数据,每组测试数据包括两行。
第1 行是正整数n,1<=n<=100,表示有n堆石子。
第2行有n个数,分别表示每堆石子的个数。
Output
对于每组输入数据,输出两行。
第1 行中的数是最小得分;第2 行中的数是最大得分。
Sample Input
44 4 5 9
Sample Output
4354
Source
elba
var n,i,j,k,ans:longint; a:array[1..200] of longint; b,f:array[1..200,1..200] of longint; function min(a,b:longint):longint; begin if a<b then exit(a) else exit(b); end; function max(a,b:longint):longint; begin if a>b then exit(a) else exit(b); end; begin readln(n); for i:=1 to n do read(a[i]); for i:=1 to n do a[i+n]:=a[i]; for i:=1 to n*2 do for j:=1 to n*2 do for k:=i to j do b[i,j]:=b[i,j]+a[k]; fillchar(f,sizeof(f),63); for i:=1 to 2*n do f[i,i]:=0; for i:=2 to n do for j:=1 to n*2-i+1 do for k:=j+1 to j+i-1 do f[j,j+i-1]:=min(f[j,j+i-1],f[j,k-1]+f[k,j+i-1]+b[j,j+i-1]); ans:=maxlongint; for i:=1 to n do ans:=min(ans,f[i,i+n-1]); writeln(ans); fillchar(f,sizeof(f),0); for i:=2 to n do for j:=1 to n*2-i+1 do for k:=j+1 to j+i-1 do f[j,j+i-1]:=max(f[j,j+i-1],f[j,k-1]+f[k,j+i-1]+b[j,j+i-1]); ans:=0; for i:=1 to n do ans:=max(ans,f[i,i+n-1]); writeln(ans); end.
0 0
- 石子合并问题
- 石子合并问题
- 【dp】石子合并问题
- 石子合并问题
- 石子合并问题
- 经典石子合并问题
- NK1137 石子合并问题
- 经典石子合并问题
- 石子合并问题
- 石子合并问题
- 【FJOI2014】石子合并问题
- DP_石子合并问题
- 石子合并问题
- 石子合并问题
- 石子合并问题
- 石子合并问题
- 石子合并问题
- 石子合并问题
- ArrayList源码分析(JDK1.8)
- NYOJ 三角形面积
- Android APK对齐总结
- 《CSS权威指南》读书笔记5
- 图像处理之二维高斯滤波详解
- 石子合并问题
- Android应用资源---状态颜色列表(Color State List)
- py自学:暴力破解校园网密码
- 前端基础知识(一)
- 山科大校赛C题
- JAVA中的面试题-多线程
- USACO 2.3 货币系统(背包/生成函数)
- Codeforces 369D Valera and Fools【思维+dp】
- 无法连接远程桌面--必须为远程桌面启用Windows防火墙例外