hdu 1421 搬寝室(dp)
#include<cstdio> #include<cmath> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define INF 10000000 int a[3000]; int now[3000]; int dp[2000+100][2000+100]; int main() { int n,k; int i,j; while(scanf("%d%d",&n,&k)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); for(i=1;i<n;i++) now[i]=(a[i]-a[i-1])*(a[i]-a[i-1]); dp[0][0]=0; for(i=0;i<=n;i++) { for(j=1;j<=k;j++) dp[i][j]=INF; } for(i=2;i<=n;i++) { for(j=1;j*2<=i;j++) { dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+now[i-1]); } } printf("%d\n",dp[n][k]); } return 0; }