Kickstart Round D 2017 : A
2024-09-04 14:47:51
思路:
动态规划。
large数据的时间范围很大,无法设计入状态中。转换思路为定义dp[i][j]为当前在景点i,并且已经游览了j个景点所花费的最小时间,这种思想与leetcode45类似。于是转移方程为dp[i][j] = min(cal(dp[i - 1][j], i), cal(dp[i - 1][j - 1] + ts, i))。其中cal(t, i)表示在时刻t出发,乘坐从景点i发出的车中尽可能早的一辆并且到达景点i+1所花费的总时间。
实现:
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = , INF = 0x3f3f3f3f;
int n, ts, tf, s[MAXN], f[MAXN], d[MAXN], dp[MAXN][MAXN]; int cal(int now, int i)
{
if (s[i] >= now) return s[i] + d[i];
return now + (f[i] - (now - s[i]) % f[i]) % f[i] + d[i];
} int main()
{
int T;
cin >> T;
for (int t = ; t <= T; t++)
{
cin >> n >> ts >> tf;
for (int i = ; i <= n - ; i++)
{
cin >> s[i] >> f[i] >> d[i];
}
dp[][] = ;
for (int i = ; i <= n - ; i++)
for (int j = i + ; j <= n - ; j++)
dp[i][j] = INF;
for (int i = ; i <= n - ; i++)
{
dp[i][] = cal(dp[i - ][], i);
for (int j = ; j <= i; j++)
dp[i][j] = min(cal(dp[i - ][j], i), cal(dp[i - ][j - ] + ts, i));
}
cout << "Case #" << t << ": ";
bool flg = false;
for (int i = n - ; i >= ; i--)
{
if (dp[n - ][i] <= tf)
{
flg = true;
cout << i << endl;
break;
}
}
if (!flg) puts("IMPOSSIBLE");
}
return ;
}
最新文章
- 数据库sqlite 存储图片
- 腾讯网2016回响中国:华清远见荣获2016年度知名IT培训品牌
- Atitit数据库层次架构表与知识点 attilax 总结
- Python全栈--7.1--字符串的格式化
- JAVA学习Swing绝对局部简单学习
- 变废为宝,将Discuz废弃的cache机制引入到memory体系中
- C#基础知识系列六(静态类和静态类成员)
- EntityFramework ,ef 介绍
- linux 挂载(转载)
- File.Create创建文件后,需要释放资源
- iOS中—触摸事件详解及使用
- DataGrid的打印预览和打印
- 【BZOJ 1185】 凸包+旋转卡壳
- android 接听和挂断实现方式
- 初学.NET小技巧(不断更新)
- RAC下一个Fatal NI connect error 12170.错误处理
- spring data jpa使用懒操作
- nodejs之url模块
- Apache Hadoop 2.9.2 的集群管理之服役和退役
- Spring整合Hibernate(转)