首页 / 客观题库

70062 - 2025青少年编程挑战赛入门组完善2

题目(材料题)

(2)石子合并  有N堆石子排成一排,每堆石子有一定的数量。现在要将这些石子合并成一堆,每次只能合并相邻的两堆石子,合并的代价是这两堆石子的数量之和。问将所有石子合并成一堆的最小总代价是多少?

试补全程序:

01 #include <iostream>

02 #define INF 2147483647

03 using namespace std;

04 const int M = 305;

05 int stones[M], pre_sum[M], dp[M][M];

06

07 int main() {

08     int n;

09     cin >> n;

10     for (int i = 1; i <= n; i++) {

11         cin >> stones[i];

12             ①    ;

13     }

14     for (int len = 2; len <= n; len++) {

15         for (int i = 1; i + len - 1 <= n; i++) {

16                 ②    ;

17                 ③    ;

18             for (int k = i; k < j; k++) {

19                 int cost =    ④    ;

20                 if (cost < dp[i][j]) {

21                     dp[i][j] = cost;

22                 }

23             }

24         }

25     }

26     cout <<     ⑤    << endl;

27     return 0;

28 }

||
( 单选 )

① 处应填(      )。

A pre_sum [i] = stones[i]

B pre_sum [i] = pre_sum [i] + stones[i]

C pre_sum[i] = pre_sum[i - 1] + stones[i]

D pre_sum [i] = dp[i][i] + stones[i]

( 单选 )

 ② 处应填(      )。

A int j = n

B int j = i + len

C int j = i + len – 1

D int j = k + 1

( 单选 )

③ 处应填(      )。 

A dp[i][j] = 0

B dp[i][j] = len

C dp[i][j] = INF

D dp[i][j] = pre_sum [j]

( 单选 )

④ 处应填(      )。

A dp[i][k] + dp[j][k]

B stones[i] + stones[j]

C dp[i][k] + dp[k + 1][j] + pre_sum[j] - pre_sum[i - 1]

D pre_sum [j] + pre_sum [i]

( 单选 )

⑤ 处应填(      )。

A dp[0][n]

B dp[1][1]

C dp[1][n] 

D dp[n][n]

意见反馈

    最多上传3张图片,格式为JPG、PNG、JPEG,单张不超过5MB

    注册

    发送验证码

    密码必须包含数字、字母和特殊字符

    找回密码

    发送验证码

    密码必须包含数字、字母和特殊字符

    运行 ID:67149

    • 测试点1:Accepted
    • 用时:0 ms
    • 内存:288 kb
    • 测试点2:Accepted
    • 用时:0 ms
    • 内存:288 kb
    输入
    203
    输出
    203

    test

    测评信息

    错误.in文件下载

    错误.out文件下载

    运行 ID:67149

    2019-01-24 15:06:36