概述
一道不算是很难的DP,一些人的爱好还真是奇怪的说!
嘿嘿
先变成非递增序列,因为要保证有一个最大的C在每一组里面。
转移方程: dp[i][j] = Min(dp[i][j-1] , dp[i-1][j-2] + (set[j-1 - set[j] )* (set[j-1] -set[j]))
第i个人 第j个筷子的时候的最小值
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NN 5010
#define Min(a,b) (a>b?b:a)
int set[NN];
int dp[1010][NN];
int main()
{
int t,k,n,i,j;
scanf("%d",&t);
while(t--){
scanf("%d%d",&k,&n);
k += 8;
for(i=n;i>=1;i--)
scanf("%d",&set[i]);
for(i=1;i<=k;i++){
dp[i][i*3] = dp[i-1][i*3-2] + (set[i*3-1] - set[i*3])*(set[i*3-1] - set[i*3]);
for(j=i*3+1;j<=n;j++)
dp[i][j] = Min(dp[i][j-1],dp[i-1][j-2] +(set[j-1] -set[j])*(set[j-1] - set[j]));
}
printf("%dn",dp[k][n]);
}
return 0;
}
最后
以上就是含糊蛋挞为你收集整理的HDU 1500 Chopsticks的全部内容,希望文章能够帮你解决HDU 1500 Chopsticks所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复