阿里巴巴 Alibaba
UVA1632
这是一个区间动态规划
定义:dp[i][j][0]dp[i][j][0]dp[i][j][0]为阿里巴巴收集完iii到jjj的宝藏后位于iii位置的最短耗时,dp[i][j][1]dp[i][j][1]dp[i][j][1]为阿里巴巴收集完iii到jjj的宝藏后位于jjj位置的最短耗时。(在最短耗时情况下,阿里巴巴收集完某个区间的宝藏后只能位于区间的边缘,不可能在内部,因为在内部的话,必有重复经过的点,而在边缘,直接从一端到另一端即可)。
初始化:
dp[i][i][0/1]=0dp[i][i][0/1]=0dp[i][i][0/1]=0
即阿里巴巴在某地都可以瞬间收集宝藏。
转移方程:
dp[i][j][0] = min(//从i+1处向左走到idp[i + 1][j][0] + Treasures[i + 1].Location - Treasures[i].Location, //从j处向左走到idp[i + 1][j][1] + Treasures[j].Location - Treasures[i].Location);//如果最短时间超时,则设为不可达if (dp[i][j][0] >= Treasures[i].Limit) {dp[i][j][0] = inf;}//从i向右走到jdp[i][j][1] = min(dp[i][j - 1][0] + Treasures[j].Location - Treasures[i].Location,//从j-1向右走到jdp[i][j - 1][1] + Treasures[j].Location - Treasures[j - 1].Location);//超时判定if (dp[i][j][1] >= Treasures[j].Limit) {dp[i][j][1] = inf;
AC代码:
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<map>
using namespace std;
constexpr static int inf = 0x3f3f3f3f;
int dp[10001][10001][2];
struct {int Location, Limit;
}Treasures[10001];
int N;
bool Input() {if (scanf("%d", &N) == EOF) {return false;}for (int i = 1; i <= N; ++i) {scanf("%d %d", &Treasures[i].Location, &Treasures[i].Limit);}return true;
}
void Init() {memset(dp, 0x3f, sizeof(dp));for (int i = 1; i <= N; ++i) {dp[i][i][0] = dp[i][i][1] = 0;}
}
int DP() {for (int Section = 2; Section <= N; ++Section) {for (int i = 1; i <= N; ++i) {int&& j = i + Section - 1;if (j > N) {continue;}dp[i][j][0] = min(dp[i + 1][j][0] + Treasures[i + 1].Location - Treasures[i].Location, dp[i + 1][j][1] + Treasures[j].Location - Treasures[i].Location);if (dp[i][j][0] >= Treasures[i].Limit) {dp[i][j][0] = inf;}dp[i][j][1] = min(dp[i][j - 1][0] + Treasures[j].Location - Treasures[i].Location,dp[i][j - 1][1] + Treasures[j].Location - Treasures[j - 1].Location);if (dp[i][j][1] >= Treasures[j].Limit) {dp[i][j][1] = inf;}}}return min(dp[1][N][0], dp[1][N][1]);
}
int main() {while (Input()) {Init();int&& Ans = DP();if (Ans == inf) {puts("No solution");}else {printf("%d\n", Ans);}}return 0;
}
2.86秒险过。。。那么,优化一下吧。
发现对于相同的区间长度,dp[i]dp[i]dp[i]的状态都由dp[i+1]dp[i+1]dp[i+1]或dp[i]dp[i]dp[i]得到,并且iii是递增的,因此可以滚动数组优化。
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<map>
using namespace std;
constexpr static int inf = 0x3f3f3f3f;
int dp[2][10001][2];
struct {int Location, Limit;
}Treasures[10001];
int N;
bool Input() {if (scanf("%d", &N) == EOF) {return false;}for (int i = 1; i <= N; ++i) {scanf("%d %d", &Treasures[i].Location, &Treasures[i].Limit);}return true;
}
void Init() {memset(dp, 0x3f, sizeof(dp));for (int i = 1; i <= N; ++i) {dp[0][i][0] = dp[0][i][1] = dp[1][i][0]=dp[1][i][1]=0;}
}
int DP() {for (int Section = 2; Section <= N; ++Section) {for (int i = 1; i <= N + 1 - Section; ++i) {int&& j = i + Section - 1;int& Ans1 = dp[i & 1][j][0];Ans1 = min(dp[(i + 1)&1][j][0] + Treasures[i + 1].Location - Treasures[i].Location,dp[(i + 1)&1][j][1] + Treasures[j].Location - Treasures[i].Location);if (Ans1 >= Treasures[i].Limit) {Ans1 = inf;}int& Ans2 = dp[i & 1][j][1];Ans2 = min(dp[i & 1][j - 1][0] + Treasures[j].Location - Treasures[i].Location,dp[i & 1][j - 1][1] + Treasures[j].Location - Treasures[j - 1].Location);if (Ans2 >= Treasures[j].Limit) {Ans2 = inf;}}}return min(dp[1][N][0], dp[1][N][1]);
}
int main() {while (Input()) {Init();int&& Ans = DP();if (Ans == inf) {puts("No solution");}else {printf("%d\n", Ans);}}return 0;
}
时间复杂度没变,但是这次只需要0.39秒,也许是是cache优化?
阿里巴巴 Alibaba相关推荐
- IDEA使用阿里巴巴Alibaba编码规范插件
IDEA使用阿里巴巴Alibaba编码规范插件 最新版<阿里巴巴Java开发手册>以及idea\eclipse插件等官方项目地址:https://github.com/alibaba/p3 ...
- 阿里巴巴(Alibaba)笔试编程题
前言 最近在牛客网上找了点阿里巴巴笔试的编程题做,现在做个简单的总结.有的代码还在调,会慢慢发出来.有的问题可以直接暴力破解的就不放出来了,一般那种问题几层循环就解决了.不过笔试编程对时间和空间都有要 ...
- 一辆学校班车里面能装多少个高尔夫球 Google 谷歌 百度 baidu 阿里巴巴 alibaba 微软 华为 hu
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 原文:h ...
- IT行业观察:阿里巴巴有望成为下一只中国IPO
拥有1.1亿互联网用户的中国依然存在著唾手可得的巨大商机. 这是谷歌(Google)首席执行长埃里克施密特(Eric Schmidt)的乐观看法.他最近向投资者表示,公司已开始在这个全球最庞大的消费市 ...
- 外籍主管眼中的阿里巴巴
尝试接受一份新领域的职位有时是值得的,而对雇主来说,任命"非正统人选"从而给团队带来清新气息,也是有好处的. 这是詹姆斯•哈迪(James Hardy)的经验.一位知道他想转行的朋 ...
- 阿里巴巴惠普_2019全球供应链25强榜单,中国仅一席,阿里巴巴首次上榜
Gartner公布了年度全球供应链25强榜单.其中阿里巴巴和荷兰化学公司阿克苏诺贝尔首次跻身供应链25强之列,分别排名第13名和24名. 2019年全球供应链25强榜单 1.高露洁棕榄(Colgate ...
- 阿里巴巴总裁马云经典语录。
奇迹的缔造者 业内对马云的评价是:一个有着和拿破仑一样身高,也同样有着和拿破仑一样宏图大志的杭州人.这位最早在中国开拓电子商务应用并坚守在互联网领域的企业家,曾经创造了中国互联网商务的众多第一. 奇迹 ...
- 阿里巴巴总裁马云语录
业内对马云的评价是:一个有着和拿破仑一样身高,也同样有着和拿破仑一样宏图大志的杭州人.这位最早在中国开拓电子商务应用并坚守在互联网领域的企业家,曾经创造了中国互联网商务的众多第一. 奇迹之上如何再生奇 ...
- 在线领取新规或迫使腾讯阿里巴巴变卦股权构造
由于中国早先发布的在线领取效劳新规对有外商投资的在线领取效劳提供商有所限制,因而能够将迫使包括腾讯(Tencent).阿里巴巴(Alibaba) 在内的一些抢先因特网企业调整其股权构造. 中国人民银行 ...
最新文章
- @所有技术社区,年度”社区之星“开选,快来盘点各家技术大佬
- Redis史上最强【集群】入门实践教程
- 怎么修改云服务器项目路径,云服务器tomcat的项目路径怎么设置
- 庆祝开博第一天!呵呵!
- 设置finder窗口大小_五个Finder技巧让你快速提高工作效率
- 机器学习 建立模型_建立生产的机器学习系统
- 计算机网络——链路层之局域网
- 好看的按钮html,html-好看的CSS按钮
- MacOS 12.0.X系统提示“未能装载磁盘映像,错误代码为109”的临时解决方法
- 表格和表单的结合示例
- Maven跳过antrun打包
- 2016峰会:项目管理与高级项目管理(广州站)
- 【转】pda的广播扫码uni-app
- matlab如何泰勒公式用求近似值_Matlab 数值计算泰勒公式
- 2.1 Apache Hadoop、HDFS - Apache Hadoop概述
- office2007卸载不干净 无法安装office64位的版本
- run `npm fund` for details
- MATLAB:DTFT、DFT 相关题目学习
- 九龙证券|光模块概念股封单资金超3亿元,传媒板块涨停潮来袭
- 熊厂远程办公!聊一聊我在家办公的真实体验!