一道動態規劃的題目。
區間動規?我不知道......
第一次接觸這種型別的動規,區間動規吧...
就是石子合併。
方程:f[
i,j] = min。
我們可以用遞推的方法實現它,但是如何遞推是個問題。
自然而然地,先求得長度為1的區間,然後是長度為2的區間,然後3.....
至於添括號的方法和各個中間和,我們可以用兩個字串陣列來處理他們。
具體看**:
1 program p1038; uses math;2 var
3 i,j,k,l,m,n,ans:longint;
4 s:array[0..30]of longint;
5 st:string;
6 c,d,f:array[0..30,0..30]of longint;
7 st1,st2:array[0..30,0..30]of string;
8 18 begin
19 assign(input,'p1038.in');
20 reset(input);
21 fillchar(c,sizeof(c),0);
22 fillchar(f,sizeof(f),0);
23 read(n);
24 for i:=1 to n do read(s[i]);
25 for i:=1 to n do
26 for j:=1 to i-1 do
27 for l:=j to i do
28 c[j,i]:=c[j,i]+s[l];
29 for i:=1 to n do
30 c[i,i]:=s[i];
31 for i:=1 to n do
32 for j:=1 to n do
33 f[i,j]:=maxlongint;
34 for i:=1 to n do
35 f[i,i]:=0;
36 for i:=1 to n do
37 str(s[i],st2[i,i]);//對中間和預處理
38 for i:=1 to n-1 do
39 for j:=1 to n-i do
40 for k:=j to j+i-1 do
41 begin
42 if f[j,j+i]>=f[j,k]+f[k+1,j+i]+c[j,j+i] then
43 begin
44 str(c[j,j+i],st);
45 st1[j,j+i]:=st1[j,k]+st1[k+1,j+i]+' '+st;//各個中間和
46 st2[j,j+i]:='('+st2[j,k]+'+'+st2[k+1,j+i]+')';//添括號的方法
47 end;
48 f[j,j+i]:=min(f[j,j+i],f[j,k]+f[k+1,j+i]+c[j,j+i]);
49 end;
50 writeln(st2[1,n]);
51 writeln(f[1,n]);
52 delete(st1[1,n],1,1);
53 writeln(st1[1,n]);
54 close(input);
55 end.
10 3 範圍驗證
rangevalidator控制項能夠驗證使用者輸入的值在乙個指定的範圍之內。如果使用者輸入的值不在該範圍之內,則顯示提示資訊。rangevalidator控制項提供了5種範圍,由type屬性指定。該屬性的值的具體描述如下 string,字串範圍 integer,整數範圍 double,實數範圍 d...
VIJOS P1037 搭建雙塔
2001年9月11日,一場突發的災難將紐約世界 中心大廈夷為平地,mr.f曾親眼目睹了這次災難。為了紀念 9?11 事件,mr.f決定自己用水晶來搭建一座雙塔。mr.f有n塊水晶,每塊水晶有乙個高度,他想用這n塊水晶搭建兩座有同樣高度的塔,使他們成為一座雙塔,mr.f可以從這n塊水晶中任取m 1 m...
VIJOS P1617 超級教主
lhx教主很能跳,因為orz他的人太多了。教主跳需要消耗能量,每跳1公尺就會消耗1點能量,如果教主有很多能量就能跳很高。教主為了收集能量,來到了乙個神秘的地方,這個地方凡人是進不來的。在這裡,教主的正上方每100公尺處就有乙個能量球 也就是這些能量球位於海拔100,200,300 公尺處 每個能量球...