1 条题解
-
0
C++ :
#include<iostream> #include<algorithm> #include<cstring> using namespace std; int len[105],f[105][52]; bool solve(int n,int k); //ifstream cin("chop.in"); //ofstream cout("chop.out"); int main() { int n,k; cin>>n>>k; k+=3; for (int i=1;i<=n;i++) cin>>len[i]; if (!solve(n,k)) cout<<-1<<endl; else cout<<f[n][k]<<endl; //system("pause"); return 0; } bool solve(int n,int k) { if (n<k*2) return false; memset(f,0x7f,sizeof(int)*105*52); sort(len+1,len+n+1); for (int i=0;i<=n;i++) f[i][0]=0; for (int j=1;j<=k;j++) for (int i=2*j;i<=n;i++) { f[i][j]=f[i-2][j-1]+(len[i]-len[i-1])*(len[i]-len[i-1]); if (i>2*j) f[i][j]=min(f[i][j],f[i-1][j]); } return true; }
Pascal :
var a:array [1..100] of longint; f:array [0..100,0..50] of longint; n,m,xb,i,j,k:longint; function min(x,y:longint):longint; begin if x>y then exit(y) else exit(x); end; begin readln(n,k); for i:=1 to n do read(a[i]); k:=k+3; if k*2>n then begin writeln(-1); halt; end; for i:=1 to n do for j:=1 to n-i do if a[j+1]<a[j] then begin m:=a[j]; a[j]:=a[j+1]; a[j+1]:=m; end; for i:=0 to 100 do for j:=0 to 50 do f[i,j]:=maxlongint; for i:=0 to n do f[i,0]:=0; for i:=1 to n do for j:=1 to k do if j*2>i then break else f[i,j]:=min(f[i-1,j],f[i-2,j-1]+sqr(a[i]-a[i-1])); writeln(f[n,k]); end.
- 1
信息
- ID
- 765
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者