hdu 1421(dp)

来源:互联网 发布:js 修改style属性 编辑:程序博客网 时间:2024/06/02 07:17

传送门
题解:设dp[i][j]为选i个物品中有j个配对的最小代价。
转移方程略(too simple),关键是定义状态

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int MAXN=2006;int n,m,dp[MAXN][MAXN>>1],w[MAXN];int main() {    while (~scanf("%d%d",&n,&m)) {        for (int i=1;i<=n;++i) scanf("%d",&w[i]);        sort(w+1,w+n+1);        dp[0][0]=0;         for (int j=1;j<=m;++j)            for (int i=j<<1;i<=n;++i) {                if (i==(j<<1)) dp[i][j]=dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]);                else dp[i][j]=min(dp[i-1][j],dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]));            }        printf("%d\n",dp[n][m]);    }    return 0;}
原创粉丝点击