hdu 1421 经典DP

来源:互联网 发布:excel跨工作簿引用数据 编辑:程序博客网 时间:2024/06/05 19:35

主要能解决的问题

n个数中选取k个不相邻的数,使得这k个数的总和最小

View Code
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int dp[2010][1010];int a[2012];const int inf = INT_MAX;int main(){    int n,k;    while(scanf("%d%d",&n,&k)!=EOF)    {        for(int i=1;i<=n;i++) scanf("%d",&a[i]);        sort(a+1,a+n+1);        int t=0;        memset(dp,127,sizeof(dp));        for(int i=0;i<=n;i++) dp[i][0]=0;        for(int i=2;i<=n;i++)            for(int j=1;2*j<=i;j++)                dp[i][j]=min(dp[i-2][j-1]+(a[i]-a[i-1])*(a[i]-a[i-1]),dp[i-1][j]);        printf("%d\n",dp[n][k]);    }}