House Man

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2256    Accepted Submission(s): 896

Problem Description
In Fuzhou, there is a crazy super man. He can’t fly, but he could jump from housetop to housetop. Today he plans to use N houses to hone his house hopping skills. He will start at the shortest house and make N-1 jumps, with each jump
taking him to a taller house than the one he is jumping from. When finished, he will have been on every house exactly once, traversing them in increasing order of height, and ending up on the tallest house.


The man can travel for at most a certain horizontal distance D in a single jump. To make this as much fun as possible, the crazy man want to maximize the distance between the positions of the shortest house and the tallest house.


The crazy super man have an ability—move houses. So he is going to move the houses subject to the following constraints:

1. All houses are to be moved along a one-dimensional path.

2. Houses must be moved at integer locations along the path, with no two houses at the same location.


3. Houses must be arranged so their moved ordering from left to right is the same as their ordering in the input. They must NOT be sorted by height, or reordered in any way. They must be kept in their stated order.


4. The super man can only jump so far, so every house must be moved close enough to the next taller house. Specifically, they must be no further than D apart on the ground (the difference in their heights doesn't matter).


Given N houses, in a specified order, each with a distinct integer height, help the super man figure out the maximum possible distance they can put between the shortest house and the tallest house, and be able to use the houses for training.

 
Input
In the first line there is an integer T, indicates the number of test cases.(T<=500)

Each test case begins with a line containing two integers N (1 ≤ N ≤ 1000) and D (1 ≤ D ≤1000000). The next line contains N integer, giving the heights of the N houses, in the order that they should be moved. Within a test case, all heights will be unique.

 
Output
For each test case , output “Case %d: “first where d is the case number counted from one, then output a single integer representing the maximum distance between the shortest and tallest house, subject to the constraints above, or
-1 if it is impossible to lay out the houses. Do not print any blank lines between answers.
 
Sample Input
3
4 4
20 30 10 40
5 6
20 34 54 10 15
4 2
10 20 16 13
 
Sample Output
Case 1: 3
Case 2: 3
Case 3: -1
 
Author
jyd
 
Source
 
Recommend
We have carefully selected several similar problems for you:  3439 3433 3442 3438 

pid=3437" target="_blank">3437 

 题目大意:http://www.cnblogs.com/scau20110726/archive/2013/05/04/3059625.html
ac代码
#include<stdio.h>
#include<string.h>
#include<queue>
#include<iostream>
#include<stdlib.h>
#define INF 1<<30
#define min(a,b) (a>b?b:a)
#define max(a,b) (a>b? a:b)
using namespace std;
struct s
{
int id,num;
}b[1010];
int n,m,vis[1010],head[1010],cnt,dis[1010],out[1010];
int cmp(const void *a,const void *b)
{
return (*(struct s *)a).num-(*(struct s *)b).num;
}
struct node
{
int u,v,w,next;
}edge[2020];
void add(int u,int v,int w)
{
edge[cnt].u=u;
edge[cnt].v=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt++;
}
int spfa(int s)
{
int i;
for(i=1;i<=n;i++)
dis[i]=INF;
memset(vis,0,sizeof(vis));
vis[s]=1;
dis[s]=0;
queue<int>q;
q.push(s);
memset(out,0,sizeof(out));
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=0;
out[u]++;
if(out[u]>n)
return 0;
for(i=head[u];i!=-1;i=edge[i].next)
{
int v=edge[i].v;
if(dis[v]>dis[u]+edge[i].w)
{
dis[v]=dis[u]+edge[i].w;
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}
return 1;
}
int main()
{
int t,c=0;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
int i,j;
memset(head,-1,sizeof(head));
cnt=0;
for(i=1;i<=n;i++)
{
scanf("%d",&b[i].num);
b[i].id=i;
}
qsort(b+1,n,sizeof(b[1]),cmp);
for(i=2;i<=n;i++)
{
add(i,i-1,-1);
if(b[i].id<b[i-1].id)
{
add(b[i].id,b[i-1].id,m);
// add(i,i-1,-1);
}
else
{
add(b[i-1].id,b[i].id,m);
// add(i-1,i,-1);
}
}
// for(i=1;i<=n;i++)
// {
// add(n+1,i,0);
// }
int s=min(b[1].id,b[n].id);
int t=max(b[1].id,b[n].id);
int ans=spfa(s);
printf("Case %d: ",++c);
if(ans)
{
printf("%d\n",dis[t]);
}
else
printf("-1\n");
}
}

HDOJ题目3440 House Man(差分约束)的更多相关文章

  1. POJ1201 Intervals 【差分约束】

    题目链接 POJ1201 题解 差分约束 令\(a[i]\)表示是否选择\(i\),\(s[i]\)表示\(a[i]\)的前缀和 对\(s[i] \quad i \in [-1,50000]\)分别建 ...

  2. HDOJ 1384 差分约束

    结题报告合集请戳:http://972169909-qq-com.iteye.com/blog/1185527 /*题意:求符合题意的最小集合的元素个数 题目要求的是求的最短路, 则对于 不等式 f( ...

  3. 图论--差分约束--HDU\HDOJ 4109 Instrction Arrangement

    Problem Description Ali has taken the Computer Organization and Architecture course this term. He le ...

  4. ZOJ 2770火烧连营——差分约束

    偶尔做了一下差分约束. 题目大意:给出n个军营,每个军营最多有ci个士兵,且[ai,bi]之间至少有ki个士兵,问最少有多少士兵. ---------------------------------- ...

  5. [USACO2005][POJ3169]Layout(差分约束)

    题目:http://poj.org/problem?id=3169 题意:给你一组不等式了,求满足的最小解 分析: 裸裸的差分约束. 总结一下差分约束: 1.“求最大值”:写成"<=& ...

  6. ShortestPath:Layout(POJ 3169)(差分约束的应用)

                布局 题目大意:有N头牛,编号1-N,按编号排成一排准备吃东西,有些牛的关系比较好,所以希望他们不超过一定的距离,也有一些牛的关系很不好,所以希望彼此之间要满足某个关系,牛可以 ...

  7. Candies---hdu3159(spfa+差分约束)

    题目链接:http://poj.org/problem?id=3159 题意:有n个小孩,m个关系格式是A B C 表示小孩 B 的糖果数最多比小孩A多C个,相当于B-A<=C; 有m个这样的关 ...

  8. poj3159 Candies(差分约束,dij+heap)

    poj3159 Candies 这题实质为裸的差分约束. 先看最短路模型:若d[v] >= d[u] + w, 则连边u->v,之后就变成了d[v] <= d[u] + w , 即d ...

  9. poj3159 最短路(差分约束)

    题意:现在需要分糖果,有n个人,现在有些人觉得某个人的糖果数不能比自己多多少个,然后问n最多能在让所有人都满意的情况下比1多多少个. 这道题其实就是差分约束题目,根据题中给出的 a 认为 b 不能比 ...

随机推荐

  1. ASP.NET MVC5 之数据迁移

    SQL 中新建数据库 DataSystem 1.web.config 数据库连接字符串: <add name="APPDataConnection" connectionSt ...

  2. 卸载Mysql connect 6.9.9

    我们在卸载MySQL的时候,会发现有一个名为“Connector Net X.X.X”(如:Connector Net 6.9.9)软件总是卸载不成功,下面我们来看看解决方法:1. 在C盘的目录下,有 ...

  3. yield让代码更加简洁

    不能传入out或ref public IEnumerable<Shop> GetShop() { ; i < ; i++) { yield return new Shop { ID ...

  4. [ SHOI 2001 ] 化工厂装箱员

    \(\\\) \(Description\) 传送带上按顺序传过来\(N\)个物品,一个有\(A,B,C\)三类. 每次装箱员手里只能至多拿十个,然后将手中三类物品中的一类装箱,才能接着拿或接着装箱, ...

  5. 程序员的幽默-献给所有Java程序员

    1. 一程序员去面试,面试官问:“你毕业才两年,这三年工作经验是怎么来的?!”程序员答:“加班.” 2. 某程序员对书法十分感兴趣,退休后决定在这方面有所建树.于是花重金购买了上等的文房四宝.一日,饭 ...

  6. 忘记Oracle密码

    1./as sysdba 2.然后你忘记密码的用户名例如Scott alter user scott identified by root 3.exit 4.sqlplus 重新登录

  7. 《Java编程的逻辑》第二部分 面向对象

  8. SQL基本操作——case end

    case end进行多条件的判断 --查看Person表 select * from Person --对math字段进行条件判断 select name,数学成绩= case then '优' th ...

  9. Java_Web三大框架之Hibernate+jsp+selvect+HQL注册用户

    Hibernate比SQL语句简单多了,代码冗余少,切方便简洁明了.下面用Hibernate+jsp+selvect+HQL来实现注册用户. 第一步:编写用户实体类和Users2.hbm.xml映射. ...

  10. 大白_uva10795_新汉诺塔

    题意:给出所有盘子的初态和终态,问最少多少步能从初态走到终态,其余规则和老汉诺塔一样. 思路: 若要把当前最大的盘子m从1移动到3,那么首先必须把剩下的所有盘子1~m-1放到2上,然后把m放到3上. ...