Be a Smart Raftsman SGU475
题目大意
有m+1个点,0是起点,m是终点,i-1到i有一条边,有一个船由0驶往m,不能返回,它在载重小于等于ci时通过第i条边消耗的时间为di否则为Di,现在有n个人,每个人体重为wi,上船或下船消耗时间为si,如果自己走则通过每一条边消耗的实际均为ti,要求船上必须一直有人,求所有人到终点消耗的时间。
分析
首先我们不难想到状压dp,使得msk记录每个人是否在船上,所以不难想到用dp[i][msk]表示走过i条边现在在船上的人是msk所需要的最短时间,发现我们状态需枚举i和msk,复杂度m*2n,转移需要枚举新msk,复杂度2n,所以总复杂度为O(m*22n),显然是不行的,所以我们考虑优化。我们发现对于每一个人的上下船关系是独立的,与其他人无关,所以我们可以考虑每次对于一个状态只改变一个人的状态(即只让一个人上船或下船),之后在通过改变的新状态更新下一个状态,这样便可以在数次更新之后得到和之前相同的结果,我们发现这是的转移复杂度便降到了n,所以最终的复杂度变为O(nm*2n)。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int w[],t[],s[],c[],d[],D[];
int dp[][],all,M[],T[];
int main(){
int n,m,i,j,k;
scanf("%d%d",&n,&m);
all=(<<n)-;
for(i=;i<=n;i++)
scanf("%d%d%d",&w[i],&t[i],&s[i]);
for(i=;i<=m;i++)
scanf("%d%d%d",&c[i],&D[i],&d[i]);
memset(M,,sizeof(M));
memset(T,,sizeof(T));
for(i=;i<=all;i++)
for(j=;j<n;j++)
if(i&(<<j)){
M[i]+=w[j+];
}else T[i]=max(T[i],t[j+]);
memset(dp,0x3f,sizeof(dp));
dp[][]=;
for(i=;i<n;i++)
for(j=;j<=all;j++)
dp[][j^(<<i)]=min(dp[][j^(<<i)],dp[][j]+s[i+]);
for(i=;i<=m;i++){
dp[i][]=0x3f3f3f3f;
for(j=;j<=all;j++)
if(dp[i-][j]<0x3f3f3f3f)
if(M[j]>c[i])dp[i][j]=dp[i-][j]+max(D[i],T[j]);
else dp[i][j]=dp[i-][j]+max(d[i],T[j]);
for(j=;j<n;j++)
for(k=;k<=all;k++)
dp[i][k^(<<j)]=min(dp[i][k^(<<j)],dp[i][k]+s[j+]);
}
printf("%d\n",dp[m][]);
return ;
}
Be a Smart Raftsman SGU475的更多相关文章
- Smart Tag——DevExpress WPF初探
Smart Tag是一个设计时扩展,所有标准控件均自带这个功能,当然也包括 DevExpress WPF Controls .可以快速设置控件的值或者绑定最重要的属性.它还可以帮助你完成一些重复的工作 ...
- International Conference for Smart Health 2015 Call for Papers
Advancing Informatics for healthcare and healthcare applications has become an international researc ...
- Call for Papers International Conference for Smart Health (ICSH) 2014
Call for PapersInternational Conference for Smart Health (ICSH) 2014 Beijing, China July 10-11, 2014 ...
- 手工给Meteor增加smart package的方法
windows下无法装mrt(Meteor的包管理工具).不过还好smart package本身也就只是一个文件夹而已,不需要在Meteor中注册什么东西.所以直接把smart package扔到me ...
- [c++] Smart Pointers
内存管理方面的知识 基础实例: #include <iostream> #include <stack> #include <memory> using names ...
- 瞄准SMART目标
瞄准SMART目标 SMART代表具体的/可度量的/可实现的/相关的和时间可控的. 1.具体的 (一个目标任务应该是具体的/事物的具体化) 2.可度量的 (如何知道你何时完成?确贴的数字,度量具体 ...
- Azure CDN Smart Routing 功能正式上线
经过Azure中国CDN产品团队的不懈努力,融合CDN服务的一个重要功能 Smart Routing目前已经正式上线.在接下来的一段时间该功能将逐步开放给所有客户.本文主要对Smart Routing ...
- 思考方式--SMART原则
如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 万事开头于你目标的设定,如果开始走错了,那么后面的路将会更加的错误,甚至于更加的努力 ...
- Smart原则
遵循smart原则,必须是具体的.可衡量的.可达到的.与岗位职责相关的.有明确达成期限的.
随机推荐
- 在C#中,Json的序列化和反序列化的几种方式
摘自:http://www.cnblogs.com/caofangsheng/p/5687994.html 在这篇文章中,我们将会学到如何使用C#,来序列化对象成为Json格式的数据,以及如何反序列化 ...
- Dungeon Master (BFS与DFS的应用)
个人心得:一开始用DFS弄了半天一直输出不了结果,后面发现并没有进行判断:好不容易能够得出答案,结果超时了,才发现原来要用BFS: 对于DFS: 从一个点开始模拟能走的所有步骤,注意边界条件,走到不能 ...
- git之commit改用第三方编辑器
git commit -m "***"方式提交注释,有限制,可通过调用第三方编辑器来编辑更好的注释 1 使用window自带的记事本 git config --global cor ...
- HIVE-利用ow_number() OVER(PARTITION BY)函数介绍求TOP-K
http://blog.csdn.net/631799/article/details/7419797 第一句话: select row_number() over (partition by mon ...
- hl7 v2.X 版本中RSP_K23消息的构造
RSP_K23消息有MSH, MSA, ERR, QAK, QPD, PID几个segment,其中ERR,PID为可选. 1. 当MSA有err时,ERR段填充出错的详细信息. 2. 当MSA为AA ...
- Java基础--注解Annotation
Annotation是给类,方法或域上加的一种特殊的标记,可以通过反射取到注解的类型和值,从而完成某种特定的操作. 定义注解需要使用元注解,元注解有@Retention和@Target //@Rete ...
- JeeSite入门介绍(一)
JeeSite特点:高效.高性能.强安全性属于开源.JavaEE快速开发平台:接私活的最佳助手: JeeSite是在Spring Framework基础上搭建的一个Java基础开发平台,以Spring ...
- Delphi 转圈 原型进度条 AniIndicator 及线程配合使用
Delphi FMX 转圈 原型进度条 progress AniIndicator TAniIndicator TFloatAnimation VCL下也有转圈菊花进度条 TActivityIndic ...
- 链接ssh失败问题
Starting sshd:/var/empty/sshd must be owned by root and not group or world-writable. ...
- DAY13-前端之JavaScript
JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中),后将其改名ScriptEase(客 ...