【习题 7-5 UVA-690】Pipeline Scheduling
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】
一定在这里写完思路再敲代码!!!
处理出5个工作单元在哪些时刻会被用到。
->设为initstatu
因为每次都会面临之前已经用了一段程序,而现在要走下一步的情况
->但有一些地方是肯定已经不能走了的。
->我们可以预处理出来哪些地方是可以走的。
->剩下的.可能不能走.我们再额外处理就好
->这样可以节省很多的时间。
然后在搜索的时候.维护长度为n的statu.
(即不断更新末尾那一段,哪个时间是不能用的->有冲突的
假设要在偏移量为i的地方开始下一个程序。
直接看看statu>>i 和initstatu的and值是不是大于0.
(是一个5维的statu
等于0就说明可以放
然后更新状态。
statu = (statu>>i)&(initstatu);
【代码】
#include <bits/stdc++.h>
using namespace std;
const int N = 20+5;
int initstatu[10],n,nowstatu[10],ans = 1e8;
int can[N];
char s[N];
bool ok(int *nowstatu,int d){
for (int i = 1;i <= 5;i++){
if ((nowstatu[i]>>d)&initstatu[i]) return false;
}
return true;
}
void dfs(int dep,int s){
if (s+n>ans) return;
if (dep > 10){
ans = min(ans,s+n);
return;
}
if (s+n+(10-dep)*can[1]>ans) return;
int tempstatu[10];
for (int d = 1;d <= can[0];d++){
if (!ok(nowstatu,can[d])) continue;
//ok
//getnewstate
for (int i = 1;i <= 5;i++) tempstatu[i] = nowstatu[i];
for (int i = 1;i <= 5;i++) nowstatu[i] = (nowstatu[i]>>can[d])|initstatu[i];
dfs(dep+1,s+can[d]);
for (int i = 1;i<= 5;i++) nowstatu[i] = tempstatu[i];
}
}
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
while (cin >> n && n){
memset(initstatu,0,sizeof initstatu);
for (int i = 1;i <= 5;i++){
cin >> (s+1);
int now = 1;
for (int j = 1;j <= n;j++){
if (s[j]=='X') initstatu[i] |= now;
now = now*2;
}
}
can[0] = 0;
for (int i = 1;i <= n;i++)
if (ok(initstatu,i)){
can[0]++;
can[can[0]] = i;
}
for (int i = 1;i <= 5;i++) nowstatu[i] = initstatu[i];
ans = n*10;
dfs(2,0);
cout << ans << endl;
}
return 0;
}
【习题 7-5 UVA-690】Pipeline Scheduling的更多相关文章
- UVA 690 Pipeline Scheduling
https://vjudge.net/problem/UVA-690 题目 你有一台包含5个工作单元的计算机,还有10个完全相同的程序需要执行.每个程序需要$n(n<20)$个时间片来执行,可以 ...
- 【暑假】[深入动态规划]UVa 1380 A Scheduling Problem
UVa 1380 A Scheduling Problem 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=41557 ...
- UVA 1380 A Scheduling Problem
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- UVA 690 PipelineScheduling 位运算+dfs+剪枝
一开始最容易想到间隔最多为n,但是结点还是太多了,需要优化. 预处理:预判一下并保存下一个可以放的位置距离之前的距离.这样可以减少很多判断. 最优化剪枝:如果当前长度+剩下没放的程序*最短间隔如果大于 ...
- ACM训练计划建议(写给本校acmer,欢迎围观和指正)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
- ACM训练计划建议(转)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
- 动态规划 Dynamic Programming 学习笔记
文章以 CC-BY-SA 方式共享,此说明高于本站内其他说明. 本文尚未完工,但内容足够丰富,故提前发布. 内容包含大量 \(\LaTeX\) 公式,渲染可能需要一些时间,请耐心等待渲染(约 5s). ...
- UVA 607 二十二 Scheduling Lectures
Scheduling Lectures Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submi ...
- UVa第五章STL应用 习题((解题报告))具体!
例题5--9 数据库 Database UVa 1592 #include<iostream> #include<stdio.h> #include<string.h&g ...
随机推荐
- Connect the Campus (Uva 10397 Prim || Kruskal + 并查集)
题意:给出n个点的坐标,要把n个点连通,使得总距离最小,可是有m对点已经连接,输入m,和m组a和b,表示a和b两点已经连接. 思路:两种做法.(1)用prim算法时,输入a,b.令mp[a][b]=0 ...
- DEDE 修改后台图集上传单个图片的大小限制
默认情况下,DEDE图集中单个图片大小限制在2M以内,而有时我们需要上传一个2M以上的文件,这是只要修改几个文件就可以实现了. 一.需要修改php.ini这个文件,我们必须保证PHP的配置中允许上传一 ...
- 学习《R数据科学》高清中文PDF+高清英文PDF+源代码
学习R有不会的就查工具书<R数据科学>, 工具不是重点,创造价值才是目的.具体到数据科学,表现形式往往是提供解决方案或者做出某种决策.至于使用什么语言,采用什么工具,不本质.用 R 还是 ...
- android 二次按返回键退出client
android中有的app退出client时弹出对话框的方法,有的是点击二次,第一次是提示用户是否退出client,第二次点击才是真正的退出app.这是用二次点击返回键的时间间隔推断, 今天就实现这简 ...
- [易飞]一张领料单单身仓库"飞了"引起的思考
[摘要]我司每月月初10号前財务要出报表.故10号前要做完毕本月结. PMC经理接到仓管员反馈. 物料-30408011003在账上怎么还有那么多?上次发料的时候已发完. 相应的领料单:5403-20 ...
- 版本号控制-搭建gitserver
GitHub是一个免费托管开源码的Gitserver,假设我们不想公开项目的源码,又不想付费使用.那么我们能够自己搭建一台Gitserver. 以下我们就看看,怎样在Ubuntu上搭建Gitserve ...
- 41.Node.js使用cnpm
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html npm是Node.js中维护第三方库.模块的工具,但是国外的速度很悲剧,这里有一个中国的源cn ...
- POJ 2458 DFS+判重
题意: 思路: 搜+判重 嗯搞定 (听说有好多人用7个for写得-.) //By SiriusRen #include <bitset> #include <cstdio>0 ...
- PDF Adobe Acrobat 9 简体中文专业版(打印店内部的软件)(你懂的!)
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- MyBatis映射
mybatis-config.xml映射文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...