杭电acm 4824Disk Schedule
来源:互联网 发布:wps for mac 编辑:程序博客网 时间:2024/05/30 04:51
Disk Schedule
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 668 Accepted Submission(s): 283
磁盘有许多轨道,每个轨道有许多扇区,用于存储数据。当我们想在特定扇区来读取数据时,磁头需要跳转到特定的轨道、具体扇区进行读取操作。为了简单,我们假设磁头可以在某个轨道顺时针或逆时针匀速旋转,旋转一周的时间是360个单位时间。磁头也可以随意移动到某个轨道进行读取,每跳转到一个相邻轨道的时间为400个单位时间,跳转前后磁头所在扇区位置不变。一次读取数据的时间为10个单位时间,读取前后磁头所在的扇区位置不变。磁头同时只能做一件事:跳转轨道,旋转或读取。
现在,需要在磁盘读取一组数据,假设每个轨道至多有一个读取请求,这个读取的扇区是轨道上分布在 0到359内的一个整数点扇区,即轨道的某个360等分点。磁头的起始点在0轨道0扇区,此时没有数据读取。在完成所有读取后,磁头需要回到0轨道0扇区的始点位置。请问完成给定的读取所需的最小时间。
对于每组测试数据,第一行包含一个整数N(0<N<=1000),表示要读取的数据的数量。之后每行包含两个整数T和S(0<T<=1000,0<= S<360),表示每个数据的磁道和扇区,磁道是按升序排列,并且没有重复。
311 1031 203 305 1021 102 11
83040901642
dp[i][i-1] = min(dp[i][i-1],dp[i-1][j] + dis(i, j));//求i到i-1最短路程
dp[i][j] = dp[i-1][j] + dis(i, i-1);//求i到j的路程
代码:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int N = 1005;
const int INF = 0x3f3f3f3f;
int n, p, d[N], dp[N][N];
int dis (int a, int b)//求a点到b点路程
{
int tmp = abs(d[a] - d[b]);
return min(tmp, 360 - tmp);
}
void init()
{
int a;
scanf("%d", &n);
d[1] = 0;
for (int i = 2; i <= n + 1; i++)
{
scanf("%d%d", &a, &d[i]);
if (i == n + 1)
p = a;
}
dp[2][1] = dis(1, 2);
}
int solve()
{
for (int i = 3; i <= n + 1; i++)
{
dp[i][i-1] = INF;
for (int j = 1; j < i-1; j++)
{
dp[i][i-1] = min(dp[i][i-1],dp[i-1][j] + dis(i, j));//求i到i-1最短路程
dp[i][j] = dp[i-1][j] + dis(i, i-1);//求i到j的路程
}
}
int ans=dp[n+1][n]+dis(n+1,n);
return ans;
}
int main ()
{
int cas;
scanf("%d", &cas);
for (int i = 1; i <= cas; i++)
{
init();
printf("%d\n", solve() + p * 800 + 10 * n);
}
return 0;
}
Disk Schedule
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 668 Accepted Submission(s): 283
磁盘有许多轨道,每个轨道有许多扇区,用于存储数据。当我们想在特定扇区来读取数据时,磁头需要跳转到特定的轨道、具体扇区进行读取操作。为了简单,我们假设磁头可以在某个轨道顺时针或逆时针匀速旋转,旋转一周的时间是360个单位时间。磁头也可以随意移动到某个轨道进行读取,每跳转到一个相邻轨道的时间为400个单位时间,跳转前后磁头所在扇区位置不变。一次读取数据的时间为10个单位时间,读取前后磁头所在的扇区位置不变。磁头同时只能做一件事:跳转轨道,旋转或读取。
现在,需要在磁盘读取一组数据,假设每个轨道至多有一个读取请求,这个读取的扇区是轨道上分布在 0到359内的一个整数点扇区,即轨道的某个360等分点。磁头的起始点在0轨道0扇区,此时没有数据读取。在完成所有读取后,磁头需要回到0轨道0扇区的始点位置。请问完成给定的读取所需的最小时间。
对于每组测试数据,第一行包含一个整数N(0<N<=1000),表示要读取的数据的数量。之后每行包含两个整数T和S(0<T<=1000,0<= S<360),表示每个数据的磁道和扇区,磁道是按升序排列,并且没有重复。
311 1031 203 305 1021 102 11
83040901642
- 杭电acm 4824Disk Schedule
- HDU 4824 Disk Schedule
- HDU 4824 Disk Schedule
- 杭电 HDU ACM 1150 Machine Schedule(二分匹配)
- hdoj 4824 Disk Schedule 【TSP】
- Hdu 4824 Disk Schedule【TSP-Dp】
- 杭电1150 Machine Schedule
- 【杭电】[4907]Task schedule
- 【杭电4907】Task schedule
- 【杭电oj4907】Task schedule
- Disk Schedule HDU
- hdu 4824 Disk Schedule(双调欧几里得旅行商问题)
- Hdu 4824 Disk Schedule (双调欧几里得旅行商问题)
- hdu 4824 Disk Schedule 双调欧几里得 (TSP类)
- 杭电ACM 1003
- 杭电 ACM 2016
- 杭电acm 1010
- 杭电 acm 1045
- 【演讲实录+视频】走近40+世界级AI专家!第三届中国人工智能大会资料分享(直播进行中_不断更新)
- C语言|构造一个简易编译器检测括号是否正确
- Python:最小的 k 个数
- 我的spfa
- C
- 杭电acm 4824Disk Schedule
- maven-shade-plugin 入门指南
- dvp和mipi接口
- solr删除全部索引数据
- 排序 基数排序
- FFMPEG —— 视频播放器 :(一)环境配置
- kernel or user oops信息定位步骤
- Android_自定义Toast、子线程修改UI
- centos系统下nodejs项目通过nginx做代理