合併石子(三種方法)

2021-09-02 20:08:51 字數 2516 閱讀 8529

在乙個操場上一排地擺放著n堆石子。現要將石子有次序地合併成一堆。規定每次只能選相鄰的2堆石子合併成新的一堆,並將新的一堆石子數記為該次合併的得分。請設計乙個程式,計算出將n堆石子合併成一堆的最小得分。

每組資料第1行為乙個正整數n(2<=n<=100),以下n行,每行乙個正整數,小於10000,分別表示第i堆石子的個數(1<=i<=n)。

7137

816214

18

對於每組資料輸出乙個正整數,即最小得分。

239
這道題有三種解法:

方法一枚舉邊界,然後列舉長度

f[i,j] 表示從第i個到第j個中,所有的數合併的最小代價

動態轉移方程為:

f[i]

[j]=

min(f[i]

[j],f[i]

[k]+f[k+1]

[j]+s[j]

-s[i-1]

);

方法二

先列舉長度,再列舉邊界

f[i,j] 表示從第i個到第j個中,所有的數合併的最小代價

動態轉移方程為:

f[i]

[j]=

min(f[i]

[j],f[i]

[k]+f[k+1]

[j]+sum[i]

[j])

;

方法三

列舉邊界,然後列舉長度

f[i,j] 表示從第i個起,接下來的j個數合併的最小代價

動態轉移方程為:

f[i,j]

=min

(f[i]

[j],f[i,k]

+f[i+k,j-k]

+sum[i,j]

);

第一種
#include

#include

#include

using

namespace std;

int f[

101]

[101

],s[

101]

,n,temp;

//初始化

intmain()

for(

int i=n-

1;i>=

1;i--

)for

(int j=i+

1;j<=n;j++

)for

(int k=i;k<=j-

1;k++

) f[i]

[j]=

min(f[i]

[j],f[i]

[k]+f[k+1]

[j]+s[j]

-s[i-1]

);//狀態轉移方程

printf

("%d"

,f[1

][n]);

//輸出

return0;

}

第二種
#include

#include

#include

using

namespace std;

int f[

101]

[101

],s[

101]

,n,temp;

//初始化

intmain()

for(

int len=

2;len<=n;len++

)for

(int i=

1;i<=n-len+

1;i++

)printf

("%d"

,f[1

][n]);

//輸出

return0;

}

第三種
#include

#include

#include

using

namespace std;

int f[

101]

[101

],s[

101]

,n,temp;

//初始化

intmain()

for(

int j=

2;j<=n;j++

)for

(int i=

1;i<=n-j+

1;i++

)for

(int k=

1;k<=j-

1;k++

) f[i]

[j]=

min(f[i]

[j],f[i]

[k]+f[i+k]

[j-k]

+s[i+j-1]

-s[i-1]

);//狀態轉移方程

printf

("%d"

,f[1

][n]);

//輸出

return0;

}

題解 合併果子 三種方法

博主與合併果子鬥爭許久了,最初接觸到的便是貪心。於是就有如下雙佇列的方法。include include include include include include include include include include define re return define s a sizeo...

三種方法 2020 11 23

利用連線類,例項化得到連線物件 連線類 連線物件 new 連線類 cmd.executescalar cmd.excutereader 關注其中一條資料 物件名.read 獲取關注列所對應的值 console.writeline 物件名 name while 物件名.read 功能,聚焦下一行資料。...

tomcat deploy專案三種方法

其中path制定訪問url路徑,docbase專案真是路徑 privileged true antiresourcelocking false antijarlocking false type org.apache.catalina.userdatabase 其中,docbase與第二種方式中的含...