DAY3 - T2 保卫地球
T2:保卫地球
题目
题目描述
北蚤想创建完银河战队,要用它保护地球
现在有一个长度为 n 的数组,将其分成 k 部分 记每段的最小值为 b1,b2...,bk
先要使得 b1b2+b1b3+...+b1bk+b2b3+b2b4+...+...+bk-1bk 最大
输入
输入文件为 protect.in。 第一行包含两个整数 n,k 第二行包含 n 个整数
输出
输出文件为 protect.out。
共一行一个数
样例
数据
20% k = 2
30% n <= 10
100% n <= 20, k <= 7
题解
DFS
#include<bits/stdc++.h>
using namespace std;
int a[51], b[51], c[51], ans_, n, k;
void dfs(int x, int y){
if(y == k + 1){
if(x == n + 1){
for(int i = 1; i <= k; i++){
int now = 1e9;
for(int j = b[i-1] + 1; j <= b[i]; j++){
now = min(now, a[j]);
}
c[i] = now;
}
int ans = 0;
for(int i = 1; i <= k; i++){
for(int j = i + 1; j <= k; j++){
ans += c[i]*c[j];
}
}
if(ans > ans_){
ans_ = ans;
}
}
}
for(int i = x; i <= n; i++){
b[y] = i;
dfs(i+1, y+1);
}
}
int main(){
scanf("%d%d", &n, &k);
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
dfs(1, 1);
printf("%d\n", ans_);
return 0;
}
没有未来的未来不是我想要的未来

浙公网安备 33010602011771号