hdu 1421经典dp
来源:互联网 发布:点云数据三维重建过程 编辑:程序博客网 时间:2024/06/06 17:04
#include<stdio.h>#include<stdlib.h>#define N 2001#define inf 0x3fffffffint a[N],dp[N][N];int Min(int v,int vv) {return v>vv?vv:v;}int cmp(const void *a,const void *b) {return *(int *)a-*(int *)b;}int main() { int n,k,i,j; while(scanf("%d%d",&n,&k)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&a[i]); qsort(a+1,n,sizeof(a[0]),cmp); for(i=1;i<=n;i++)if((i+1)%2==0) dp[i][(i+1)/2]=inf;//这里主要是初始化下面的程序是偶数的情况 for(i=0;i<=n;i++) dp[i][0]=0; 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]+(a[i-1]-a[i])*(a[i-1]-a[i])); printf("%d\n",dp[n][k]); }return 0;}/*下面这个更巧妙,很棒!!!!,初始化很简单#include <iostream>#include <algorithm>using namespace std ;int dp[2001][1001],w[2001] ;bool cmp(int a,int b){ return a<b ;}int main(){ int n,k ; while(~scanf("%d%d",&n,&k)) { for(int i=1;i<=n;i++) scanf("%d",&w[i]) ; sort(w+1,w+n+1,cmp) ; for(i=0;i<=n;i++) dp[i][0]=0;//将所有的i,0出事为0即可 for(int i=2;i<=n;i++) for(int j=1;(j<<1)<=i;j++) { if(i==(j<<1))//当前为i是因为是偶数所以dp[i-1][j]中i-1<j*2的所以不存在这种情况默认为无穷 dp[i][j]=dp[i-2][j-1]+(w[i]-w[i-1])*(w[i]-w[i-1]) ; else //否则就要考虑这种情况,因为i=5,j=2时i=4,j=2是存在的, 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][k]) ; } return 0 ;}*/
0 0
- hdu 1421 经典DP
- hdu 1421经典dp
- HDU - 1421 搬寝室(经典DP)
- hdu 1421 搬寝室(经典dp)
- hdu 1227(经典dp)
- HDU 1069 DP 经典
- HDU 1003 经典DP
- hdu 4035 经典期望dp
- hdu 2196(经典树形dp)
- dp经典题目 hdu 2084
- HDU 2196 Computer 经典树形DP
- HDU——1227(经典DP)
- HDU 2196 Computer(树形dp经典)
- HDU 2196 Computer(经典树形DP)
- hdu 4616 Game ( 经典树形dp )
- hdu 4455 Substrings (经典DP)
- hdu 2196 树形dp经典题目
- 经典DP HDU 2084 数塔
- 扫描文件列表
- iOS开发之单元格复用的两种做法
- java从字符串中提取数字
- C/C++ struct初始化/复制/内存分配技巧
- oracle select limit的方法
- hdu 1421经典dp
- Android AAPT and Overlay
- eclipse html插件的下载和安装
- Android知识链接汇总
- 对于递归的浅显理解
- StringBuilder、StringBuffer与Java字符串处理
- request用法
- 2015.4.1 第一篇博客
- 哪本书是对程序员最有影响、每个程序员都该阅读的书?