HDU 1421 DP

来源:互联网 发布:数据库实施工程师 编辑:程序博客网 时间:2024/06/15 21:05

先qsort

i==j*2  dp[i][j]=dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]);

i>j*2  dp[i][j]=min(dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]),dp[i-1][j]);


测试数据:

6 2
1 8 9 9 10 20
2


7 3
7 9 4 3 1 9 2
2


10 4 
100 200 250 9 9 126 270 300 54 78 
1652


10 4 
102 200 250 9 9 126 270 300 54 78 
1552


10 4 
102 200 250 45 45 126 270 300 54 78 
1552

#include "iostream"#include "algorithm"using namespace std;int dp[2010][2010];int main(){int n,k,i,j;int a[2010];while (scanf("%d%d",&n,&k)!=EOF){for (i=0;i<n;i++)scanf("%d",&a[i]);sort(a,a+n);for (i=n;i>=1;i--)a[i]=a[i-1];memset(dp,-1,sizeof(dp));for (i=0;i<=n;i++)dp[i][0]=0;for (j=1;j<=k;j++){dp[j*2][j]=dp[j*2-2][j-1]+(a[j*2-1]-a[j*2])*(a[j*2-1]-a[j*2]);for (i=j*2+1;i<=n;i++){dp[i][j]=dp[i-1][j];if (dp[i-2][j-1]!=-1 && dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1])<dp[i][j])dp[i][j]=dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]);}}printf("%d\n",dp[n][k]);}return 0;}





0 0
原创粉丝点击