HOJ_14001 Just Terraffic!
题意相对来说比较扭曲。。所以来说下模型,具体做法有兴趣的孩纸去问度娘或者波塞冬吧~~
给出一个序列长度,并且输入该序列,该序列的含义是横坐标:
任何两个相邻坐标绝对值小于等于1000的必然为一个整体,
任何两个相邻坐标绝对值大于等于2000的必然是不同的两个整体,
其余有可能是,也有可能不是一个整体。
问,横跨三个坐标的整体有多少个,横跨两个坐标的整体有多少个?
如果唯一确定,则直接输出数量,否则输出“Ambiguous”
如果无解输出“Impossible”
直觉上认为这是有向无环图的DP问题,分别扫最大2坐标整体出现次数和最小2坐标整体出现次数。
如果二者中没有可行解,输出“Impossible”
如果二值不相等输出“Ambiguous”
否则直接按照要求输出即可。
时间复杂度是O(N)——状态总数n*每个状态决策数2*转移时间1
AC代码:
#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
const long long INF=1e8+233;
const long long MAXN=3000233;
long long n;
long long arr[MAXN];
long long dp1[MAXN];
long long dp2[MAXN];
void init()
{
// memset(dp2,0,sizeof(dp2));
// memset(arr,0,sizeof(arr));
// memset(dp1,0,sizeof(dp1));
for(long long i=0;i<n;++i)
{
dp1[i+1]=INF;
// dp2[i+1]=0;
cin>>arr[i];
}
}
int main()
{
cin.sync_with_stdio(false);
while(cin>>n&&n)
{
init();
dp1[0]=1;
dp2[0]=1;
for(long long i=0;i<n-1;++i)
{
if(dp1[i]!=INF&&dp2[i])
{
long long d1=10000;
if(i+2<n)
d1=arr[i+2]-arr[i+1];
long long d2=arr[i+1]-arr[i];
if(d1>1000&&d2<2000) dp1[i+2]=min(dp1[i+2],dp1[i]+1),dp2[i+2]=max(dp2[i+2],dp2[i]+1); long long d3=15000;
if(i+3<n)d3=arr[i+3]-arr[i+2];
if(i+3>n)continue;
// else continue;
if(d1<2000&&d2<2000&&d3>1000)dp1[i+3]=min(dp1[i+3],dp1[i]),dp2[i+3]=max(dp2[i+3],dp2[i]);
}
}
if(dp2[n]==dp1[n])
{ long long car2=dp2[n];
car2--;
n-=car2*2;
long long car3=n/3;
cout<<"Cars without trailers: "<<car2<<"\n";
cout<<"Cars with trailers: "<<car3<<"\n";
}else
{
if(dp1[n]==INF&&dp2[n]==0){cout<<"Impossible\n";break;}
cout<<"Ambiguous\n";
} } return 0;
}
HOJ_14001 Just Terraffic!的更多相关文章
随机推荐
- 《C#高效编程》读书笔记06-理解几个等同性判断之间的关系
当创建自定义类型时(无论是class还是struct),应为类型定义"等同性"的含义.C#提供了4种不同的函数来判断两个对象是否"相等": public sta ...
- 内容显示分页数字分页 aspx
此处是aspx里面分页显示,数据层和业务层是由动软生成 当然,我们也可以可以利用listView实现分页ListView(高效分页) public partial class NewList : Sy ...
- 14.JAVA-jar命令使用
介绍 jar命令用来对*.class文件进行压缩,从而生成jar(archive)归档文件,避免文件过多. 定义一个文件: package common.demo ; public class Tes ...
- 使用visio创建数据库模型
使用软件:visio 2007 下载地址:https://pan.baidu.com/s/1i4LG1Id 主要参考:http://blog.csdn.net/zhang_xinxiu/article ...
- GCC 编译错误 relocation truncated to fit: R_X86_64_32S against `.bss'
问题如下图所示:(.text+0x53a): relocation truncated to fit: R_X86_64_32S against `.bss' 以前在Linux中编译程序,从来没有遇到 ...
- NIO(一)缓冲区
I/O的基本概念 同步和异步的概念: 所谓的同步就是在发出一个请求的时候,如果没有得到结果,就不返回.即调用者主动等待返回结果. 所谓的异步:调用之后直接返回结果,一般通过回调函数来处理这个应用. 阻 ...
- 【MFC】可以换行的编辑框
在mfc中编辑框允许输入多行时,换行符被表示为<归位><换行>即“\r\n”,用ascii码表示为13 10 如果为编辑框中想要输入换行,就请将编辑框的属性: Auto HSc ...
- Mantis-1.3.3 (Ubuntu 16.04)
平台: Ubuntu 类型: 虚拟机镜像 软件包: mantis-1.3.3 bug tracking commercial devops mantis open-source project man ...
- DB错误代码大全
db2错误代码大全 sqlcode sqlstate 说明000 00000 SQL语句成功完成01xxx SQL语句成功完成,但是有警告+012 01545 未限定的列名被解释为一个有相互关系的引 ...
- Python3基础12(collections、struct、itertools、chardet等的使用)
import struct import base64import itertoolsimport chardet from collections import namedtuple,default ...