1 条题解
-
0
【参考程序】
#include<bits/stdc++.h> using namespace std; int a[110],f[60][110];//a数组从小到大排序后,f[i][j]表示 a[1]-a[j]组成i对筷子的最优解。 int main() { int n,K;scanf("%d%d" ,&n,&K);if(n/2<K) {printf("-1\n");return 0;} for(int i=1;i<=n;i++) scanf("%d" ,&a[i]); sort(a+1,a+n+1); memset(f,63,sizeof(f)); for(int i=0;i<=n;i++) f[0][i]=0; for(int ki=1;ki<=K;ki++) for(int i=2*ki;i<=n;i++) { f[ki][i]=min(f[ki][i-1],f[ki-1][i-2]+(a[i]-a[i-1])*(a[i]-a[i-1])); } printf("%d\n",f[K][n]); return 0; }
- 1
信息
- ID
- 243
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 172
- 已通过
- 65
- 上传者