hdu1227 dp
题意:在一条路上有 n 个站点,并给定了每个站点的坐标,然后想要在 k 个站点旁边分别各建一个补给站,求所有站点到最近的补给站的距离和的最小值。
是的,毫无疑问,显然是 DP 问题,但是这题怎么递推还是需要考虑的,我一开始是以 dp [ k ] [ i ] 表示设好第 k 个补给站并讨论到第 i 个站点时的最短路径,即第 k 个补给站不一定是设在第 i 个站点的,但是敲了一半我就发现这样做非常麻烦,因为首先我必须记录下每次 dp 时最后一个站点的位置,其次我还要对于每个考虑到的站点分析最后一个补给站设在之前(即从 dp [ k ] [ i - 1 ]转移)或在第 i 站(即从 dp [ k - 1 ] [ i - 1 ]转移并修改中间项的最小距离),所以很快我就意识到我不能这么做,粗看了题解之后我才发现,做法其实应该是我一开始 pass 掉的 dp [ k ] [ i - 1 ] 表示在第 i 站设第 k 个补给站的最短路程,这样只要对于设置最后一个补给站的 dp 值加上剩下没有加的距离,就是最终结果。
就这样,我基本理解了题目的做法,并且敲了一遍,然后就习惯性地 WA 了,昂,基本也属习惯,虽然我也一直在努力纠正,就是在很多我很习惯的模型上我一般不会敲错,但是这些新想的,专对题目的 dp 我却总是会出错,主要就是各种细节,特别是杭电对于各种细节坑非常扣。
这题一点一点比对,才发现,坐标是有负数的,所以最好就是一开始把所有的坐标都弄成非负数,然后 dp 过程中也有各种小错误,一题大概当时做了一天吧,还是很心塞的。
#include<stdio.h>
#include<string.h>
#define min(a,b) a<b?a:b
#define INF 0xFFFFFFF int a[],dp[][],w[][]; int main(){
int n,m,c=;
while(scanf("%d%d",&n,&m)!=EOF&&n!=||m!=){
int i,j,k,tmp,ans=INF;
for(i=;i<=n;i++){
scanf("%d",&a[i]);
}
memset(w,,sizeof(w));
for(i=n;i>=;i--){
a[i]=a[i]-a[]+;
}
for(i=;i<=n;i++){
for(j=i;j<=n;j++){
tmp=;
for(k=i;k<=j;k++){ tmp+=min(a[k]-a[i],a[j]-a[k]);
}
w[i][j]=tmp;
}
}
/*
printf("\nw:\n");
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%3d",w[i][j]);
}
printf("\n");
}
printf("\n");
*/
// printf("min=%d\n",min(a[3]-a[2],a[2]-a[1])); memset(dp,,sizeof(dp));
for(i=;i<=n;i++){
for(j=;j<=i;j++){
dp[][i]+=a[i]-a[j];
}
}
for(j=;j<=m;j++){
for(i=j;i<=n;i++){
dp[j][i]=INF;
for(k=j-;k<=i-;k++){
dp[j][i]=min(dp[j][i],dp[j-][k]+w[k][i]);
/*
if(t==0){
printf("i=%d\nj=%d\nk=%d\ndp[j-1][k]=%d\nw(k,i)=%d\n",i,j,k,dp[j-1][k],w[k][i]);
}
*/ } }
}
/*
printf("\n");
for(j=1;j<=m;j++){
for(i=1;i<=n;i++){
printf("%3d",dp[j][i]);
}
printf("\n");
}
printf("\n");
*/
for(i=m;i<=n;i++){
tmp=dp[m][i];
// printf("%d\n",tmp);
for(j=i+;j<=n;j++){
tmp+=a[j]-a[i];
}
ans=min(ans,tmp);
}
// printf("\n");
printf("Chain %d\nTotal distance sum = %d\n\n",++c,ans);
}
return ;
}
hdu1227 dp的更多相关文章
- poj1160 dp
//Accepted 564 KB 63 ms //和hdu1227一样 //dp[i][j]=min(dp[i][j],dp[k][j-1]+cost[k+1][i]) //初始化条件,dp[0][ ...
- DP总结 ——QPH
常见优化 单调队列 形式 dp[i]=min{f(k)} dp[i]=max{f(k)} 要求 f(k)是关于k的函数 k的范围和i有关 转移方法 维护一个单调递增(减)的队列,可以在两头弹出元素,一 ...
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...
- AEAI DP V3.7.0 发布,开源综合应用开发平台
1 升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...
- AEAI DP V3.6.0 升级说明,开源综合应用开发平台
AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- [斜率优化DP]【学习笔记】【更新中】
参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...
- BZOJ 1010: [HNOI2008]玩具装箱toy [DP 斜率优化]
1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9812 Solved: 3978[Submit][St ...
随机推荐
- C#中一个简单的匹配16进制颜色的正则测试
using System; using System.Text.RegularExpressions; namespace Test { class Program { //匹配16进制颜色代码的正则 ...
- English trip -- VC(情景课)2 C Where's my pencli?
Grammar focus 语法点: in 和 on in the desk 在桌子抽屉里 on the desk 在桌子面上 Practice 练习 Where's my pencil? I ...
- php--------对象(object) 与 数组(array) 的转换
php开发中常常用到数组,sql数据都是数组,数组和对象用的也是比较多的,常常相互转化,数组是PHP的灵魂,非常强大,面向对象编程也是挺方便的. /** * 数组 转 对象 * * @param ar ...
- 无法安装Java,以下开关中存在错误:“0”
无法安装Java,以下开关中存在错误:“0”:. 解决方法:以管理员运行
- spting Boot 创建一个springBoot项目
spting Boot 创建一个springBoot项目 1)学习springBoot使用软件:IDEA软件(前面的文章有安装idea的过程). 也可以使用另一种方法在https://start.sp ...
- 有名管道mkfifo
int mkfifo(const char *pathname, mode_t mode); int mknod(const char *pathname, mode_t mode, dev_t de ...
- java基本类型的大小
1个字节是8位byte 1字节short 2字节int 4字节long 8字节float 4字节double 8字节char 2字节boolean 1字节======================= ...
- 使用Jenkins自动编译我的.net 项目
1.Jenkins是什么? Jenkins是一个可扩展的持续集成的引擎,主要用于持续自动的构建.测试软件项目 监控一些定时执行的任务. 2.安装配置 最新的Jenkins 安装包可以从这里下载:h ...
- python爬虫田康林
代码如下 import requestsimport json import time import os from threading import Timer def getHTML(url ...
- iOS多线程编程:线程同步总结
1:原子操作 - OSAtomic系列函数 iOS平台下的原子操作函数都以OSAtomic开头,使用时需要包含头文件<libkern/OSBase.h>.不同线程如果通过原子操作函数对同一 ...