思路:

动态规划。

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 ;
}

最新文章

  1. 数据库sqlite 存储图片
  2. 腾讯网2016回响中国:华清远见荣获2016年度知名IT培训品牌
  3. Atitit数据库层次架构表与知识点 attilax 总结
  4. Python全栈--7.1--字符串的格式化
  5. JAVA学习Swing绝对局部简单学习
  6. 变废为宝,将Discuz废弃的cache机制引入到memory体系中
  7. C#基础知识系列六(静态类和静态类成员)
  8. EntityFramework ,ef 介绍
  9. linux 挂载(转载)
  10. File.Create创建文件后,需要释放资源
  11. iOS中—触摸事件详解及使用
  12. DataGrid的打印预览和打印
  13. 【BZOJ 1185】 凸包+旋转卡壳
  14. android 接听和挂断实现方式
  15. 初学.NET小技巧(不断更新)
  16. RAC下一个Fatal NI connect error 12170.错误处理
  17. spring data jpa使用懒操作
  18. nodejs之url模块
  19. Apache Hadoop 2.9.2 的集群管理之服役和退役
  20. Spring整合Hibernate(转)

热门文章

  1. C# MVC 枚举转 SelectListItem
  2. Fluently NHibernate 插入CLOB字段
  3. python 获取代码宿主机名 ip
  4. qrcode.react和jquery.qrcode生成二维码
  5. bzoj2461: [BeiJing2011]符环
  6. ubuntu php5.6源码安装
  7. ubuntu下nginx的安裝
  8. POJ - 1422 Air Raid(DAG的最小路径覆盖数)
  9. 简单记录CentOS服务器配置JDK+Tomcat+MySQL
  10. python创建文件