Problem4-1013
2016-07-06 17:18
183 查看
简单题意:车票的价格决定于两个站点之间的距离。给出了描述距离和价钱之间关系的表格。求花费最少
解题思路:用Floyd算法,借鉴了网上的算法,他们用的是_int64,直接用int不知道有没有问题;
代码如下:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const __int64 inf = 1e18;
__int64 map[105][105];
__int64 k[105];
__int64 a[5];
__int64 c[5];
__int64 n,m;
__int64 judge(__int64 x)
{
if(x>0 && x<=a[1])
return c[1];
if(x<=a[2])
return c[2];
if(x<=a[3])
return c[3];
if(x<=a[4])
return c[4];
return inf;
}
__int64 kabs(__int64 a)
{
return a<0?-a:a;
}
void floyd()
{
__int64 i,j,k;
for(k = 1; k<=n; k++)
for(i = 1; i<=n; i++)
for(j = 1; j<=n; j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j] = map[i][k]+map[k][j];
}
int main()
{
__int64 t,i,j,x,y,cas = 1;
scanf("%I64d",&t);
while(t--)
{
for(i = 1; i<=4; i++)
scanf("%I64d",&a[i]);
for(i = 1; i<=4; i++)
scanf("%I64d",&c[i]);
scanf("%I64d%I64d",&n,&m);
for(i = 1; i<=n; i++)
scanf("%I64d",&k[i]);
for(i = 0; i<=n; i++)
{
for(j = 0; j<=n; j++)
map[i][j] = inf;
map[i][i] = 0;
}
for(i = 1; i<=n; i++)
for(j = i; j<=n; j++)
{
map[i][j] = map[j][i] = judge(kabs(k[j]-k[i]));
}
floyd();
printf("Case %I64d:\n",cas++);
while(m--)
{
scanf("%I64d%I64d",&x,&y);
if(map[x][y] == inf)
printf("Station %I64d and station %I64d are not attainable.\n",x,y);
else
printf("The minimum cost between station %I64d and station %I64d is %I64d.\n",x,y,map[x][y]);
}
}
return 0;
}
解题思路:用Floyd算法,借鉴了网上的算法,他们用的是_int64,直接用int不知道有没有问题;
代码如下:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const __int64 inf = 1e18;
__int64 map[105][105];
__int64 k[105];
__int64 a[5];
__int64 c[5];
__int64 n,m;
__int64 judge(__int64 x)
{
if(x>0 && x<=a[1])
return c[1];
if(x<=a[2])
return c[2];
if(x<=a[3])
return c[3];
if(x<=a[4])
return c[4];
return inf;
}
__int64 kabs(__int64 a)
{
return a<0?-a:a;
}
void floyd()
{
__int64 i,j,k;
for(k = 1; k<=n; k++)
for(i = 1; i<=n; i++)
for(j = 1; j<=n; j++)
if(map[i][j]>map[i][k]+map[k][j])
map[i][j] = map[i][k]+map[k][j];
}
int main()
{
__int64 t,i,j,x,y,cas = 1;
scanf("%I64d",&t);
while(t--)
{
for(i = 1; i<=4; i++)
scanf("%I64d",&a[i]);
for(i = 1; i<=4; i++)
scanf("%I64d",&c[i]);
scanf("%I64d%I64d",&n,&m);
for(i = 1; i<=n; i++)
scanf("%I64d",&k[i]);
for(i = 0; i<=n; i++)
{
for(j = 0; j<=n; j++)
map[i][j] = inf;
map[i][i] = 0;
}
for(i = 1; i<=n; i++)
for(j = i; j<=n; j++)
{
map[i][j] = map[j][i] = judge(kabs(k[j]-k[i]));
}
floyd();
printf("Case %I64d:\n",cas++);
while(m--)
{
scanf("%I64d%I64d",&x,&y);
if(map[x][y] == inf)
printf("Station %I64d and station %I64d are not attainable.\n",x,y);
else
printf("The minimum cost between station %I64d and station %I64d is %I64d.\n",x,y,map[x][y]);
}
}
return 0;
}
相关文章推荐
- 4412开发板和4418开发板接口区别说明
- RxJava 基础篇
- 大数据学习课程分享
- android 5.0 Launcher TV 开发 1
- windows下使用vnc viewer 远程链接Linux桌面
- [置顶] Recall(召回率) Precision(准确率) F-Measure E值 sensitivity(灵敏性) specificity(特异性)漏诊率 误诊率 ROC AUC
- 1.3为WebApi创建帮助文档
- ListView或者RecyclerView中德Item添加分割线的另一种方法
- 一位基地学长(华科特优生)的励志贴: 大学生活点滴回忆录
- android5.1中自动更新时间机制
- Linux替换变量中包含空格 sed: -e expression #1, char 6: unterminated `s' command
- RecyclerView中的item的match_parent属性失效问题解决方案。
- 好的用户界面-界面设计的一些技巧
- zookeeper的下载使用及简单demo
- 使用JQ播放和暂停HTML5的视频
- ORACLE数据泵导入导出案例(expdp & impdp)
- x264的一些参数设置对编码效率的影响
- svnserve.conf: Option expected的问题解决方法
- Tensorflow tflearn 编写RCNN
- 图案解锁失败后无法使用Google帐户解