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原则,必须是具体的.可衡量的.可达到的.与岗位职责相关的.有明确达成期限的.
随机推荐
- BEC listen and translation exercise 13
The old lady sits on a mobile chair every morning. He got a large fortune when his father died, but ...
- 如何显示PHP运行错误
在运行文件的最前面加两行代码: error_reporting(E_ALL); ini_set('display_errors', '1'); 这样调试起来就方便多了
- 使用Visio画UML模型
Microsoft Office Visio“UML 模型图” 模板为创建复杂软件系统的面向对象的模型 (模型:建模系统的一种抽象表示,它从特定的视角并在某一抽象级别上指定建模系统.) 提供全面的支持 ...
- 一种基于Rsync算法的数据库备份方案设计
根据容灾备份系统对备份类别的要求程度,数据库备份系统可以分为数据级备份和应用级备份.数据备份是指建立一个异地的数据备份系统,该系统是对原本地系统关键应用数据实时复制.当出现故障时,可由异地数据系统迅速 ...
- mysql-jdbc创建connection理解
jdbc源码分析(http://blog.csdn.net/brilliancezhou/article/details/5499738) 创建JDBC连接代码 Class.forName(" ...
- BZOJ - 2142 礼物 (扩展Lucas定理)
扩展Lucas定理模板题(貌似这玩意也只能出模板题了吧~~本菜鸡见识鄙薄,有待指正) 原理: https://blog.csdn.net/hqddm1253679098/article/details ...
- 洛谷 P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ...
- Unity之将Texture保存成png
http://blog.csdn.net/bingheliefeng/article/details/51177505 using UnityEngine;using System.Collectio ...
- Python函数-map()
map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回.如下: def ...
- mysql之 Innobackupex全备恢复(原理、演示)
一. Innobackupex恢复原理 After creating a backup, the data is not ready to be restored. There might b ...