solution.md 1.8 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1
# 超级胶水
F
fix bug  
feilong 已提交
2

每日一练社区's avatar
每日一练社区 已提交
3
小明有n颗石子,按顺序摆成一排。他准备用胶水将这些石子粘在一起。每颗石子有自己的重量,如果将两颗石子粘在一起,将合并成一颗新的石子,重量是这两颗石子的重量之和。  
每日一练社区's avatar
每日一练社区 已提交
4

每日一练社区's avatar
每日一练社区 已提交
5
为了保证石子粘贴牢固,粘贴两颗石子所需要的胶水与两颗石子的重量乘积成正比,本题不考虑物理单位,认为所需要的胶水在数值上等于两颗石子重量的乘积。  
每日一练社区's avatar
每日一练社区 已提交
6

每日一练社区's avatar
每日一练社区 已提交
7
每次合并,小明只能合并位置相邻的两颗石子,并将合并出的新石子放在原来的位置。  
每日一练社区's avatar
每日一练社区 已提交
8

每日一练社区's avatar
每日一练社区 已提交
9 10 11 12 13
现在,小明想用最少的胶水将所有石子粘在一起,请帮助小明计算最少需要多少胶水。  

测试样例

输入 
每日一练社区's avatar
每日一练社区 已提交
14

每日一练社区's avatar
每日一练社区 已提交
15 16 17 18 19
```
3 

3 4 5
```
每日一练社区's avatar
每日一练社区 已提交
20

每日一练社区's avatar
每日一练社区 已提交
21
输出
每日一练社区's avatar
每日一练社区 已提交
22

每日一练社区's avatar
每日一练社区 已提交
23 24 25 26
```
47
```

每日一练社区's avatar
每日一练社区 已提交
27 28
下面的代码实现了这一功能,请你补全空白处。

每日一练社区's avatar
每日一练社区 已提交
29
```cpp
每日一练社区's avatar
每日一练社区 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
const int maxn = 100005;

int numv[maxn];
int v[maxn];

int dfs(int idx)
{
    if (idx == 0)
        return 0;

    if (idx == 1)
        return v[0] * v[1];

    int max_, a = 0x3f3f3f, b = 0x3f3f3f3f, c = 0;
    if (idx >= 2)
        __________________
    b = v[idx] * numv[idx - 1] + dfs(idx - 1);
    c = min(a, b);
    return c;
}

int main()
{

    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &v[i]);
        if (i == 0)
            numv[i] = v[i];
        numv[i] = numv[i - 1] + v[i];
    }

    printf("%d", dfs(n - 1));
}
```
每日一练社区's avatar
每日一练社区 已提交
67 68

## aop
F
fix bug  
feilong 已提交
69

每日一练社区's avatar
每日一练社区 已提交
70
### before
F
fix bug  
feilong 已提交
71

每日一练社区's avatar
每日一练社区 已提交
72
```cpp
每日一练社区's avatar
每日一练社区 已提交
73 74
 
```
每日一练社区's avatar
每日一练社区 已提交
75

每日一练社区's avatar
每日一练社区 已提交
76
### after
F
fix bug  
feilong 已提交
77

每日一练社区's avatar
每日一练社区 已提交
78
```cpp
每日一练社区's avatar
每日一练社区 已提交
79

每日一练社区's avatar
每日一练社区 已提交
80 81 82
```

## 答案
F
fix bug  
feilong 已提交
83

每日一练社区's avatar
每日一练社区 已提交
84
```cpp
每日一练社区's avatar
每日一练社区 已提交
85
a = (v[idx] * v[idx - 1] + dfs(idx - 2) + numv[idx - 2] * (v[idx] + v[idx - 1]));
每日一练社区's avatar
每日一练社区 已提交
86 87 88
```
## 选项

F
fix bug  
feilong 已提交
89

每日一练社区's avatar
每日一练社区 已提交
90
### A
F
fix bug  
feilong 已提交
91

每日一练社区's avatar
每日一练社区 已提交
92
```cpp
每日一练社区's avatar
每日一练社区 已提交
93
a = (v[idx] * v[idx - 1] + dfs(idx - 2));
每日一练社区's avatar
每日一练社区 已提交
94 95 96
```

### B
F
fix bug  
feilong 已提交
97

每日一练社区's avatar
每日一练社区 已提交
98
```cpp
每日一练社区's avatar
每日一练社区 已提交
99
a = (dfs(idx - 2) + numv[idx - 2] * (v[idx] + v[idx - 1]));
每日一练社区's avatar
每日一练社区 已提交
100 101 102
```

### C
F
fix bug  
feilong 已提交
103

每日一练社区's avatar
每日一练社区 已提交
104
```cpp
每日一练社区's avatar
每日一练社区 已提交
105
a = (v[idx] * v[idx - 1] + dfs(idx - 1) + numv[idx + 2] * (v[idx] + v[idx - 1]));
每日一练社区's avatar
每日一练社区 已提交
106
```