126 条题解
-
0why722 LV 8 @ 2009-10-18 09:31:26
记录每个区间的断点,然后递归得到算式,用数组记录每个数字左右两边有几个括号。
procedure work(l,r:longint);
var
i,j,k:longint;
begin
inc(d[l,1],1);
inc(d[r,2],1);
if rl+1 then begin
if c[l,r]>0 then work(l,l+c[l,r]);
if l+c[l,r]+1b then exit(b);
p:=k;
exit(a);
end;
function dis(i,j:longint):longint;
var k:longint;
begin
if b>0 then exit(b);
dis:=0;
for k:=i to j do inc(dis,a[k]);
b:=dis;
end;
begin
fillchar(s,sizeof(s),0);
fillchar(d,sizeof(d),0);
fillchar(c,sizeof(c),0);
fillchar(b,sizeof(b),0);
fillchar(f,sizeof(f),0);
readln(n);
for i:=1 to n do read(a[i]);
for i:=1 to n-1 do f:=dis(i,i+1);
for i:=3 to n do
for j:=1 to n-i+1 do
begin
f[j,j+i-1]:=maxlongint;
for k:=0 to i-2 do
f[j,j+i-1]:=min(f[j,j+k]+f[j+k+1,j+i-1]+dis(j,j+i-1),f[j,j+i-1]);
c[j,j+i-1]:=p;
end;
t:=1;
work(1,n);
for i:=1 to n do
begin
for j:=1 to d do write('(');
write(a[i]);
for j:=1 to d do write(')');
if in then write('+');
end;
writeln;
writeln(f[1,n]);
for i:=1 to t-2 do write(s[i],' ');writeln(s[t-1]);
end. -
02009-10-17 21:42:34@
procedure dfs(x,y:longint);
var t:longint;
begin
inc(l);
u[l]:=sum[x,y];
t:=g[x,y];
inc(left[x]);
inc(right[y]);if abs(y-t)>1 then begin dfs(t+1,y);end; 0 then begin dfs(x,t);end;
end;
两个小时后全A。。。
注意大于等于。。
感谢张牛。T_T
我只有一个问题。。。
我的括号是右优先。。。
LS几位说的都是左优先。。。?
算法不同?还是我理解错误? -
02009-10-12 20:19:01@
括号是靠左输出的,楼下说靠右输出的请经过大脑思考后再下结论。
提供一组数据
3
2 2 2
答案是
((2+2)+2)
10
4 6
50行搞定
Const Maxn=20;Var f,pre:array[1..Maxn,1..Maxn]of longint;
a,left,right:array[1..Maxn]of longint;
sum,ans:array[0..Maxn]of longint;
n,i,j,k:longint;Procedure dfs(l,len:integer);
var mid:integer;
begin
inc(left[l]); inc(right[l+len-1]);
mid:=pre[l,len];
if mid>1 then dfs(l,mid);
if len-mid>1 then dfs(l+mid,len-mid);
inc(ans[0]); ans[ans[0]]:=f[l,len]-f[l,mid]-f[l+mid,len-mid];
end;Begin
readln(n);
sum[0]:=0;
for i:=1 to n do begin
read(a[i]);
inc(sum[i],sum+a[i]);
end;
for i:=1 to n do f:=0;
for j:=2 to n do
for i:=1 to n-j+1 do begin
f:=maxlongint;
for k:=1 to j-1 do
if f+f+sum-sum -
02009-10-11 15:29:25@
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbug啊啊啊啊啊啊
80分的注意了注意了啊啊啊啊···转移的时候一定要
-
02009-10-10 00:14:40@
竟然有多解!!!!!!!!!!!
---|---|---|---|---|---|---|---|---|---|--
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msvar ans,n:longint;s,a:array[0..30]of longint;
r,f:array[0..30,0..30]of longint;
function find(i,j:longint):longint;
var k,t,z:longint;
begin
if f -
02009-10-07 21:12:37@
好猥琐的输出!!!
program p1038;
var a:array[1..20]of integer;
t,i,j,k,n:longint;
data:array[0..20,0..20]of longint;
s:array[0..20]of longint;
s1:string;
function min(x,y:longint):longint;
begin
if x -
02009-10-06 20:12:42@
这么水的题竟然提交了十几次!!!!!!!
题目描述想杀人啊
首先多解要保存括号在左边的
其次第三行是从左到右,由里到外!!!!!!!!!!!!!!!!! -
02009-10-04 12:31:12@
不要听下面的人胡说- -
括号是输出最靠左的,1A是证据
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
02009-10-01 09:10:43@
太猥琐了居然不说清楚,必须输出最靠右的
-
02009-09-27 21:39:01@
由于我是个沙茶,只能用建立二叉树的方法输出,也就80行....
-
02009-09-27 21:10:17@
终于修成正果了
程序还是长的要死program p1038;
var
f,way,sum,b:array[0..20,0..20] of longint;
n:longint;
a:array[1..20] of integer;
procedure init;
var
i,j:longint;
begin
readln(n);
for i:=1 to n do
begin
read(a[i]);
sum:=a[i];
end;
fillchar(b,sizeof(b),0);
for i:=1 to n do
for j:=1 to n do
f:=-1;
for i:=1 to n do
for j:=i+1 to n do
begin
sum:=sum+a[j];
end;
end;
function search(l,r:longint):longint;
var
i,kk,j:longint;
begin
if l>=r then
exit(0);
if l -
02009-09-24 13:25:28@
石子合并
感谢 Mato完整版 的提示:
Hint:在有多解的情况下,输出括号最靠右的。
-
02009-09-22 16:48:16@
膜拜fenghao大牛、
-
02009-09-21 17:21:09@
if(f
-
02009-09-20 12:09:26@
Hint:
在有多解的情况下,输出括号最靠右的。
-
02009-09-17 21:55:32@
这题很XX
不解释 -
02009-09-16 17:44:41@
var i,j,n,min,mink,k,h,p:integer;
a,h1,h2,b:array[1..100] of integer;
f,sz,wei:array[1..100,1..100] of integer;procedure jia(x:integer);
begin
inc(p); b[p]:=x;
end;procedure jk(s,w:integer);
begin
if s=w then exit;
inc(h1); inc(h2[w]);
if s+1=w then begin jia(sz);exit; end;
jk(s,wei); jk(wei+1,w);
jia(sz);
end;begin
readln(n);
for i:=1 to n do begin read(a[i]); sz:=a[i]; end;for i:=1 to n-1 do
for j:=i+1 to n do sz:=sz+a[j];for i:=1 to n-1 do f:=sz;
for h:=2 to n-1 do
for i:=1 to n-h do
begin
j:=i+h;
min:=f; mink:=i;
for k:=i+1 to j-1 do if f+f[k+1,j] -
02009-09-15 23:01:22@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0msprogram v1038;
var a,b:array[0..21] of longint;
g,f:array[0..21,0..21] of longint;
i,j,k,n,temp:longint;
procedure print(i,j:longint);
var k:longint;
begin
if i=j
then begin
write(a[i]-a);
exit;
end;
k:=g;
write('(');
print(i,k);
write('+');
print(k+1,j);
write(')');
end;
procedure draw(i,j,x:longint);
var k,t:longint;
begin
k:=g;
t:=x-(a[j]-a[k]);
if k>i
then begin
draw(i,k,t);
write(t,' ');
end;
t:=x-(a[k]-a);
if j>k+1
then begin
draw(k+1,j,t);
write(t,' ');
end;
end;
begin
readln(n);
for i:=1 to n do
begin
read(f);
a[i]:=a+f;
end;
for j:=2 to n do
for i:=j-1 downto 1 do
begin
temp:=maxlongint;
for k:=i to j-1 do
if temp>f+f[k+1,j]
then begin
temp:=f+f[k+1,j];
g:=k;
end
else if temp=f+f[k+1,j]
then g:=k;
f:=temp+(a[j]-a);
end;
print(1,n);
writeln;
writeln(temp);
draw(1,n,a[n]);
writeln(a[n]);
end.一次Ac,留念
练递归呀这题…… -
02009-09-15 21:18:43@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
< 80分 -
02009-09-15 20:54:44@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms
写挫了 92行
鄙视诡异的输出