题目:非常多人在一起吃饭。有两组单支的筷子,定义badness为一对筷子长度差的平方,求最小的badness和。

分析:dp,最大公共子序列类似物。

这里利用数学关系找到一个结论:

a < b < c < d 时,(c - a)^2 +(d-b)^2 <(d-a^2)+(c-b)^2;(展开就可以)

所以最优解一定不会交叉,然后先用元素少的串,求长串的LCS的就可以。

权值计算用长度差的平方,而不是1。

这里,能够设置两种状态f(i。j):

1.以a[i]。b[j]为结束标志的最优解,则 T(n)= n^3    { 须要遍历前一位置,非常多反复 };

2.a[1..i]与b[1..j]两区间的最优解,则T(n)= n^2   { 仅仅取决本位置选否,去掉反复 }。

说明:(2011-09-24 05:03)。

#include <stdio.h>
#include <stdlib.h> #define min( a, b ) ((a)<(b)?(a):(b)) int A[ 501 ];
int B[ 501 ];
int T[ 501 ][ 501 ];
int S[ 501 ][ 501 ]; int cmp( const void*a, const void*b )
{
return *((int *)a) - *((int *)b);
} int f( int *a, int *b, int N, int M )
{
for ( int i = 1 ; i <= N ; ++ i )
for ( int j = i ; j <= M ; ++ j )
S[ i ][ j ] = (a[ i ]-b[ j ])*(a[ i ]-b[ j ]);
for ( int i = 1 ; i <= N ; ++ i )
for ( int j = i ; j <= M ; ++ j )
T[ i ][ j ] = 0xfffffff;
for ( int i = 0 ; i <= M ; ++ i )
T[ 0 ][ i ] = 0;
for ( int i = 1 ; i <= N ; ++ i ) {
T[ i ][ i ] = T[ i-1 ][ i-1 ] + S[ i ][ i ];
for ( int j = i+1 ; j <= M ; ++ j )
T[ i ][ j ] = min( T[ i-1 ][ j-1 ]+S[ i ][ j ], T[ i ][ j-1 ] );
} return T[ N ][ M ];
} int main()
{
int t,N,M,S;
scanf("%d",&t);
while ( t -- ) {
scanf("%d",&N);
for ( int i = 1 ; i <= N ; ++ i )
scanf("%d",&A[ i ]);
scanf("%d",&M);
for ( int i = 1 ; i <= M ; ++ i )
scanf("%d",&B[ i ]);
qsort( &A[ 1 ], N, sizeof( int ), cmp );
qsort( &B[ 1 ], M, sizeof( int ), cmp ); if ( N <= M )
printf("%d\n",f( A, B, N, M ));
else
printf("%d\n",f( B, A, M, N ));
}
return 0;
}

最新文章

  1. mysql比较时间大小unix_timestamp
  2. Struts2文件上传和文件下载
  3. SPRING MVC总结
  4. theano中的scan用法
  5. 3. Android框架和工具之 xUtils(ViewUtils )
  6. 面向报文(UDP)和面向字节流(TCP)的区别
  7. 【USACO 3.2.6】香甜的黄油
  8. mysql的主从复制配置
  9. SCM文章4教训:定时器共阴极LED动态显示屏
  10. 浅谈分析表格布局与Div+CSS布局的区别
  11. hdu5673 Robot 卡特兰数 / 默慈金数
  12. Java爬虫_资源网站爬取实战
  13. 在centos,docker中安装HeadlessChrome
  14. python之property、类方法和静态方法
  15. Vue+koa2开发一款全栈小程序(8.图书列表页)
  16. MySQL社区版升级到Percona Server
  17. pytest的执行规则和顺序
  18. ELK 日志学习
  19. spring如何管理mybatis(一) ----- 动态代理接口
  20. C# 验证过滤代理IP是否有效

热门文章

  1. android基本控件学习-----Date&amp;Time
  2. selenium题
  3. AC日记——黑魔法师之门 codevs 1995
  4. WPS复制时删除超链接
  5. php cli模式下调试
  6. Android Retrofit使用教程(二)
  7. Linux学习之十四-Linux文件和目录权限
  8. win10中以管理员身份启动notepad、cmd、editplus
  9. mysql root密码忘记最快方法
  10. 每天5道面试题(二)java基础