Problem UVA690-Pipeline Scheduling
Accept:142 Submit:1905
Time Limit: 3000 mSec
Problem Description
Input
Output
Sample Input
X...XX.
.X.....
..X....
...X...
......X
0
Sample Ouput
34
题解:dfs的思路不难,剪枝也很容易想到,最优化剪枝。这个题主要是实现时的技巧性比较强。一开始没有想到只存阶段性的表,直接最大5*200,根本就不会往二进制的方向去想,看到别人题解的标题时二进制才意识到这一点,对于每一次搜索到的下一个可能的合理位置,当要继续递归下去时,这一次找到的合理位置和上一次的起始位置之间的表就已经没有意义了(对于这个方向继续向下的递归来说),直接位运算删掉即可,这样每时每刻都至多是5*20,开个int s[5]即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib> using namespace std; const int N = ,maxn = ; int n,cnt,Min;
int table[N],skip[maxn]; bool Judge(int *num,int step){
for(int i = ;i < N;i++){
if((num[i]>>step)&table[i]) return false;
}
return true;
} void init(){
memset(table,,sizeof(table));
char str[maxn];
cnt = ,Min = n*; for(int i = ;i < N;i++){
scanf("%s",str);
for(int j = ;j < n;j++){
if(str[j] == 'X') table[i] |= (<<j);
}
} for(int i = ;i <= n;i++){
if(Judge(table,i)) skip[cnt++] = i;
}
} void dfs(int *s,int d,int time){
if(d == ){
Min = min(Min,time);
return;
} if(time+skip[]*(-d) > Min) return; for(int i = ;i < cnt;i++){
if(Judge(s,skip[i])){
int tmp[N];
for(int j = ;j < N;j++){
tmp[j] = ((s[j]>>skip[i]) | table[j]);
}
dfs(tmp,d+,time+skip[i]);
}
}
} int main()
{
#ifdef GEH
freopen("input.txt","r",stdin);
#endif
while(~scanf("%d",&n) && n){
init();
dfs(table,,n);
printf("%d\n",Min);
}
return ;
}
UVA690-Pipeline Scheduling(dfs+二进制压缩状态)的更多相关文章
-
Fliptile (dfs+二进制压缩)
Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He ha ...
-
poj3254二进制放牛——状态压缩DP
题目:http://poj.org/problem?id=3254 利用二进制压缩状态,每一个整数代表一行的01情况: 注意预处理出二进制表示下没有两个1相邻的数的方法,我的方法(不知为何)错了,看到 ...
-
UVA 690 Pipeline Scheduling
https://vjudge.net/problem/UVA-690 题目 你有一台包含5个工作单元的计算机,还有10个完全相同的程序需要执行.每个程序需要$n(n<20)$个时间片来执行,可以 ...
-
HDU-1074.DoingHomework(撞鸭dp二进制压缩版)
之前做过一道二进制压缩的题目,感觉也不是很难吧,但是由于见少识窄,这道题一看就知道是撞鸭dp,却总是无从下手....最后看了一眼博客,才顿悟,本次做这道题的作用知识让自己更多的认识二进制压缩,并无其它 ...
-
POJ 3254 压缩状态DP
题意:一个矩形网格,可以填0或1, 但有些位置什么数都不能填,要求相邻两个不同时为1,有多少种填法.矩形大小最大 12*12. 压缩状态DP大多有一个可行的state的范围,先求出这个state范围, ...
-
ZOJ 3471 压缩状态DP
这个问题要看状态怎么想,第一种直接的想法是1代表未合并,状态就从1111111 转移到 带有1个0,然后带有两个0, 但是这样子编程非常不直观.换一种思路,0代表未合并,但是我可以先合并前几个,就是说 ...
-
动态规划(DP),压缩状态,插入字符构成回文字符串
题目链接:http://poj.org/problem?id=1159 解题报告: 1.LCS的状态转移方程为 if(str[i-1]==str[j-1]) dp[i][j]=dp[i-1][j-1] ...
-
poj1753 Flip Game —— 二进制压缩 + dfs / bfs or 递推
题目链接:http://poj.org/problem?id=1753 Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submis ...
-
poj 3740 Easy Finding 二进制压缩枚举dfs 与 DLX模板详细解析
题目链接:http://poj.org/problem?id=3740 题意: 是否从0,1矩阵中选出若干行,使得新的矩阵每一列有且仅有一个1? 原矩阵N*M $ 1<= N <= 16 ...
随机推荐
-
[转]逻辑斯蒂回归 via python
# -*- coding:UTF-8 -*-import numpydef loadDataSet(): return dataMat,labelMat def sigmoid(inX): retur ...
-
完善ext.grid.panel中的查询功能(紧接上一篇)
今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...
-
wikioi 1688 求逆序对
/*=========================================================== wikioi 1688 求逆序对 时间限制: 1 s 空间限制: 12800 ...
-
Part 13 Create a custom filter in AngularJS
Custom filter in AngularJS 1. Is a function that returns a function 2. Use the filter function to cr ...
-
别人走的路--uap
首先,我先谈谈我个人的经历,我今年34岁了,做了10多年的ERP实施顾问,大学刚毕业的时候是做ERP软件开发的,后来转岗做了实施顾问.根据我的个人经验,我给你几点建议.1.既然是很大的公司,那么ERP ...
-
Python新手学习基础之数据类型——变量
关于Python的变量是这样描述的: 变量是存储在内存里的一个值,通过变量名,我们可以访问到该变量的值. 上面这几行代码中,price,count和sum都是变量,Python是动态类型语言,变量是不 ...
-
escape()、encodeURI()、encodeURIComponent()区别详解(转)
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,dec ...
-
假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size <; 20 而已」
假设一个大小为100亿个数据的数组,该数组是从小到大排好序的,现在该数组分成若干段,每个段的数据长度小于20「也就是说:题目并没有说每段数据的size 相同,只是说每个段的 size < 20 ...
-
OO第四次作业总结
一:测试与正确性论证的效果差异 首先,测试和正确性论证都是对程序的可靠与否,是否有误进行测试,从整体上来看,测试多偏向于实践,而正确性论证则大多偏向于理论. 测试:测试首先是构造一组测试样例,之后将程 ...
-
RobotFramework测试问题二:各种元素不能定位问题
各种元素不能定位问题 一.元素定位 A. Click Element + xpath B. Click Element + contains C. Execute Javascript + getEl ...