POJ2496 Military Recruit

                                                                                            Military Recruit
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 1124 Accepted: 542

Description

Background 
Tom is a military recruit for an elite army unit. As the last part of his final exams, he will be put into unknown terrain and has to find his way to a designated exit point, carrying all his heavy military gear. 
As Tom is a little bit afraid of this task, he has used Google Maps to obtain satellite images of the training area. He has identified all the possible entry and exit spots and possible connections with their estimated length. This relation between sites does not need to be symmetric due to different terrain heights. 
However, he does not know, from which site to which site he will have to march. Unfortunately, he quickly realizes that he won't be able to successfully perform the march in the worst-case of the two sites that have the maximum distance to each other, no matter how hard he practices. 
Common sense tells him that his instructors will always pick distinct sites for the entry and exit sites, and he assumes that every pair of distinct sites has equal probability to become his task. 
Problem 
Given a set of sites, possible connections between some of the sites together with their length and Tom's desired success probability p, you are to compute the minimum distance Tom must be comfortable with so that he will pass his exam with at least probability p, assuming that every pair of distinct sites is equally likely.

Input

The first line contains the number of scenarios. 
The next line contains an integer p (1 <= p <= 100) specifying Tom's minimum success probability. Then follows a line with the number of sites n (2 <= n <= 100). The subsequent n lines contain n integers each, separated by a space. The i-th line contains the distances from site i to all other sites, e.g. the distance from site i to site j can be found in the i-th line at position j. Distances are non-negative integers less than 1000. The distance from a site to itself will always be zero. If the distance between two sites is "-1" there is no direct connection between those sites in the corresponding direction. You can assume that every site can be reached somehow from every other site.

Output

The output for every scenario begins with a line containing "Scenario #i:", where i is the number of the scenario starting at 1. 
Then print a single line with the minimum distance Tom has to practice for followed by an empty line.

Sample Input

2
67
3
0 1 2
1 0 3
2 3 0
50
4
0 1 -1 -1
-1 0 1 999
1 -1 0 -1
-1 999 -1 0

Sample Output

Scenario #1:
3

Scenario #2:
2

Source

 
 

思路

一个测试,给出N个点之间的距离。然后给出一个概率P(注意这个P是个整数,转换成概率后要除以100,然后变成小数)。然后这个人随即选起始点对(起点和终点时不同的),问,这个人至少能够完成多远的距离,才能通过以概率P/100通过测试。首先利用FLOYD求出这些点之间的距离。然后把距离排序。找出符合条件的最小距离即可。
 

代码

 1 #include <cstdlib>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <cctype>
 7 #include <algorithm>
 8 
 9 #define MAXCOST 99999999
10 
11 using namespace std;
12 
13 
14 int mp[100+2][100+2];
15 int final_cost[100*100+4];
16 
17 
18 
19 int main(int argc, char *argv[])
20 {
21     
22     int t;
23     
24     scanf("%d",&t);
25     
26     int i,j,k;
27     int casen=1;
28     for(casen=1;casen<=t;casen++)
29     {
30                                  int n,m;
31                                  double p;
32                                  scanf("%lf",&p);
33                                  scanf("%d",&n);
34                                  
35                                  for(i=1;i<=n;i++)
36                                  {
37                                                  for(j=1;j<=n;j++)
38                                                  {
39                                                                   int cost;
40                                                                   scanf("%d",&cost);
41                                                                   if(cost==-1)
42                                                                   {mp[i][j]=MAXCOST;}
43                                                                   else
44                                                                   {mp[i][j]=cost;}
45                                                  }
46                                  }
47                                  
48                                  
49                                  for(k=1;k<=n;k++)
50                                  for(i=1;i<=n;i++)
51                                  for(j=1;j<=n;j++)
52                                  {
53                                                   if(mp[i][j]>mp[i][k]+mp[k][j])
54                                                   mp[i][j]=mp[i][k]+mp[k][j];
55                                  }
56                                  k=0;
57                                  
58                                  for(i=1;i<=n;i++)
59                                  for(j=1;j<=n;j++)
60                                  {if(i==j)
61                                  continue;
62                                  final_cost[k++]=mp[i][j];}
63                                  
64                                  
65                                  
66                                  
67                                  sort(final_cost,final_cost+k);
68                                  p/=100.0;
69                                  
70                                 
71                                  double tmp=p*k;
72                                  
73                                  int x=(int)ceil(tmp);
74                                  
75                                  
76                                  printf("Scenario #%d:\n",casen);
77                                  
78                                  printf("%d\n\n",final_cost[x-1]);
79                                  
80                                  
81                                  
82                                  
83     }
84                                                   
85                                                   
86                                                   
87                                                   
88     
89     
90     
91     
92     
93     system("PAUSE");
94     return EXIT_SUCCESS;
95 }

 

转载于:https://www.cnblogs.com/zjushuiping/archive/2012/10/24/2737916.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值