《动态规划》hdoj 1421 求和问题+qsort

之前while语句里面!=EOF没写 超时 死活找不出原因 细节!!!!!!!!!!!!!!!!!!!!! 郁闷

dp[i][j]记录前i件物品 取j对所需要的最小pl值 

动态转移方程意思为取与不取

a[i]转化 相当于求和问题 在i个里面取k个 求最小和

#include<stdio.h>

int n,k,i,j;

int dp[2005][1005];

int w[2005];

int min(int x,int y)

{

    return x<y?x:y;

}

int cmp(const void *a,const void *b)

{

    return*(int *)a-*(int*)b;

}

int main()

{

   while(scanf("%d%d",&n,&k))

    {

        for(i=1;i<=n;i++)

           scanf("%d",&w[i]);

       qsort(w+1,n,sizeof(w[0]),cmp);

        for(i=1;i<n;i++)

           w[i]=(w[i]-w[i+1])*(w[i]-w[i+1]);

        for(i=0;i<=n;i++)

           {

                 for(j=0;j<=k;j++)

                 {

                      dp[i][j]=99999999999;

                 }

           }

        for(i=0;i<=n;i++)

            dp[i][0]=0;

        for(j=1;j<=k;j++)

        {

           for(i=j*2;i<=n;i++)

            {

               dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+w[i-1]);

            }

        }

       printf("%d\n",dp[n][k]);

    }

    return 0;

}

你可能感兴趣的:(《动态规划》hdoj 1421 求和问题+qsort)