1 条题解
-
0
C :
#include <stdio.h> #include <stdlib.h> #define maxn 2010 #define INF 1000000000 #define min(A,B) ((A)<(B))?(A):(B) int A[maxn], dp[2][maxn]; int cmp(const void * a, const void * b) { return ( *(int*)a-*(int*)b); } int main() { int n, k; while(scanf("%d%d",&n,&k) != EOF) { if(n==0&&k==0) break; for(int i = 1;i <= n; i++)scanf("%d",&A[i]); for(int i = 0;i <= 1; i++){ for(int j = 0;j <= n; j++){ dp[i][j]=INF; } } for(int i = 0;i < 2; i++)dp[i][0]=0; qsort(A+1,n,sizeof(int),cmp); for(int i = 2;i <= n; i++) { for(int j = k;j >= 1; j--){ int temp = dp[1][j]; dp[1][j]=min(dp[0][j-1]+(A[i-1]-A[i])*(A[i-1]-A[i]),dp[1][j]); dp[0][j]=temp; } } printf("%d\n",dp[1][k]); } return 0; }
C++ :
#include <stdio.h> int n,k,b[2222][1111]; int run() { int i,j,a[2222],s,l; for(i=1;i<=n;i++) scanf("%d",&a[i]); for(i=1;i<=n;i++) for(j=i+1;j<=n;j++) if(a[i]>a[j]) { l=a[i]; a[i]=a[j]; a[j]=l; } for(i=0;i<=n;i++) for(j=0;j<=k;j++) b[i][j]=-1; b[0][0]=0; for(i=0;i<=n;i++) for(j=0;j<=k;j++) if(b[i][j]!=-1) { s=b[i][j]+(a[i+1]-a[i+2])*(a[i+1]-a[i+2]); if((b[i+2][j+1]==-1)||(b[i+2][j+1]>s)) b[i+2][j+1]=s; if((b[i+1][j]==-1)||(b[i+1][j]>b[i][j])) b[i+1][j]=b[i][j]; } printf("%d\n",b[n][k]); } int main() { scanf("%d%d",&n,&k); while(n!=0) { run(); n=0; scanf("%d%d",&n,&k); } return 0; }
- 1
信息
- ID
- 745
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者