原创:

http://www.cnblogs.com/proverbs/archive/2012/10/03/2711151.html

超高仿:

http://blog.csdn.net/mars_ch/article/details/53020127

高仿:

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 105
#define mem(x) memset(x,0x1f,sizeof(x))
int cases,n,m,p,a[N],b[N],c[N],ans;
int ab[N][N],ac[N][N],bc[N][N];
int main(){
scanf("%d",&cases);
while(cases--){
mem(ab),mem(ac),mem(bc),ans=0x3fffffff;
scanf("%d%d%d",&n,&m,&p);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=m;i++)scanf("%d",&b[i]);
for(int i=1;i<=p;i++)scanf("%d",&c[i]);
ab[n+1][0]=ac[0][p+1]=bc[m+1][0]=0;
for(int i=n;i;i--)
for(int j=1;j<=m;j++)
ab[i][j]=min(ab[i+1][j],min(ab[i+1][j-1],ab[i][j-1]))+abs(a[i]-b[j]);
for(int i=1;i<=n;i++)
for(int j=p;j;j--)
ac[i][j]=min(ac[i-1][j],min(ac[i-1][j+1],ac[i][j+1]))+abs(a[i]-c[j]);
for(int i=m;i;i--)
for(int j=1;j<=p;j++)
bc[i][j]=min(bc[i+1][j-1],min(bc[i][j-1],bc[i+1][j]))+abs(b[i]-c[j]);
for(int i=0;i<=n+1;i++)
for(int j=0;j<=m+1;j++)
for(int k=0;k<=p+1;k++){
ans=min(ans,ab[i][j]+bc[j][k]+ac[i][k]);
ans=min(ans,ab[i+1][j]+bc[j][k]+ac[i][k]);
ans=min(ans,ab[i][j]+bc[j+1][k]+ac[i][k]);
ans=min(ans,ab[i][j]+bc[j][k]+ac[i][k+1]);
ans=min(ans,ab[i][j]+bc[j+1][k]+ac[i][k+1]);
ans=min(ans,ab[i+1][j]+bc[j][k]+ac[i][k+1]);
ans=min(ans,ab[i+1][j]+bc[j+1][k]+ac[i][k]);
ans=min(ans,ab[i+1][j]+bc[j+1][k]+ac[i][k+1]);
}
printf("%d\n",ans);
}
}

POJ 1682 DP的更多相关文章

  1. hdu 1513 && 1159 poj Palindrome (dp, 滚动数组, LCS)

    题目 以前做过的一道题, 今天又加了一种方法 整理了一下..... 题意:给出一个字符串,问要将这个字符串变成回文串要添加最少几个字符. 方法一: 将该字符串与其反转求一次LCS,然后所求就是n减去 ...

  2. poj 1080 dp如同LCS问题

    题目链接:http://poj.org/problem?id=1080 #include<cstdio> #include<cstring> #include<algor ...

  3. poj 1609 dp

    题目链接:http://poj.org/problem?id=1609 #include <cstdio> #include <cstring> #include <io ...

  4. POJ 1037 DP

    题目链接: http://poj.org/problem?id=1037 分析: 很有分量的一道DP题!!! (参考于:http://blog.csdn.net/sj13051180/article/ ...

  5. Jury Compromise POJ - 1015 dp (标答有误)背包思想

    题意:从 n个人里面找到m个人  每个人有两个值  d   p     满足在abs(sum(d)-sum(p)) 最小的前提下sum(d)+sum(p)最大 思路:dp[i][j]  i个人中  和 ...

  6. poj 1485 dp

    转自:http://www.cnblogs.com/kuangbin/archive/2011/11/12/2246407.html [题目大意] 一条公路上有n个旅馆,选出其中k个设置仓库,一个仓库 ...

  7. POJ 3017 DP + 单调队列 + 堆

    题意:给你一个长度为n的数列,你需要把这个数列分成几段,每段的和不超过m,问各段的最大值之和的最小值是多少? 思路:dp方程如下:设dp[i]为把前i个数分成合法的若干段最大值的最小值是多少.dp转移 ...

  8. POJ 1661 DP

    Help Jimmy Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11071   Accepted: 3607 Descr ...

  9. POJ 1160 DP

    题目: poj 1160 题意: 给你n个村庄和它的坐标,现在要在其中一些村庄建m个邮局,想要村庄到最近的邮局距离之和最近. 分析: 这道题.很经典的dp dp[i][j]表示建第i个邮局,覆盖到第j ...

随机推荐

  1. Linux 添加挂载硬盘(包含挂载大于2T以上硬盘)

    转自:http://blog.csdn.net/season_hangzhou/article/details/36423223 由于事先规划问题或者业务需求量激增,总会出现机器硬盘空间不够用的情况 ...

  2. 【codeforces 335A】Banana

    [题目链接]:http://codeforces.com/contest/335/problem/A [题意] 让你构造一个长度为n的字符串; 每次你可以从这个字符串中任意取走字符; 让你求出取的次数 ...

  3. JS 去除字符串中的最后一个字符

    var str = 'Hello World!'; str = str.substr(0,str.length-1); alert(str);

  4. hdu_4430,二分

    注意处理溢出 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...

  5. pre自动换行

    从word复制到html中的文本,用pre能够原汁原味的展示出来,但是会出现超过屏蔽界限的情况. 需要进行换行处理. 加上一句css pre { white-space: pre-wrap; word ...

  6. Magento-设置产品显示的条数和默认条数

    在Block/Product/List/Toolbar.php里面,控制每页显示条数和默认条数的方法如下: 1.每页显示条数: protected function _getAvailableLimi ...

  7. 安卓第一课:android studio 的环境搭建与真机运行以及遇到的问题

    AS的下载: https://developer.android.com/studio/index.html AS的安装: android studio, sdk, virtual device都要安 ...

  8. FragmentPagerAdapter和FragmentStatePagerAdapter的区别

    FragmentPagerAdapter 1:简单的介绍: 该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种:如果需要处理有很多页,并且数据动 ...

  9. Android 学习笔记:Navigation Drawer

    laylout文件: <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com ...

  10. Spring mvc 启动 和 请求分发

    Spring mvc 启动 和 请求分发 启动加载: abstract class HttpServletBean extends HttpServlet void init() initServle ...