一开始最容易想到间隔最多为n,但是结点还是太多了,需要优化。

预处理:预判一下并保存下一个可以放的位置距离之前的距离。这样可以减少很多判断。

最优化剪枝:如果当前长度+剩下没放的程序*最短间隔如果大于等于ans,那么对答案没有贡献,可以剪去。

优化:占用和不占用两种状态,如果横向来看可以压缩为int,判断时用上为运算。

此题挂在长度的枚举上,我把长度为n给忽略了,实际上可以只有一部分长度为n。

#include<bits/stdc++.h>
//using namespace std; //#define local const int maxn = ;
const int N = ;
int tab[N]; int ans; int ivs[maxn],SZ; void dfs(int d,int* pre,int len)
{
if(len + ( - d)*ivs[] >= ans ) return;
for(int i = ; i < SZ; i++){
int iv = ivs[i];
bool ok = true;
for(int j = ; j < N; j++) {
if((pre[j]>>iv)&tab[j]) { ok = false; break;}
}
if(ok) {
if(d == ) {
ans = std::min(ans,len+iv);
return ;
}
int now[N];
for(int j = ; j < N; j++) {
now[j] = (pre[j] >> iv) | tab[j];
}
dfs(d+,now,len+iv);
}
}
} void preJudge(int n)
{
SZ = ;
for(int iv = ; iv <= n; iv++){
bool ok = true;
for(int i = ; i < N; i++) {
if((tab[i]>>iv)&tab[i]) { ok = false; break;}
}
if(ok) ivs[SZ++] = iv;
}
} int main()
{
#ifdef local
freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
#endif // local
int n;
char G[maxn+];
while(~scanf("%d",&n)&&n) { memset(tab,,sizeof(tab));
for(int i = ; i < N; i++){
scanf("%s",G);
for(int j = ; j < n; j++) if(G[j] == 'X'){
tab[i] |= <<j;
}
}
ans = n*;
preJudge(n);
dfs(,tab,n);
printf("%d\n",ans);
}
return ;
}

UVA 690 PipelineScheduling 位运算+dfs+剪枝的更多相关文章

  1. 【位运算DFS/DLX】【HDU1426】【数独】

    题意:标准的一道数独题 DFS做法: 将横纵九宫格里的数字用位运算状态压缩,且可以通过逻辑或来确定总共有哪些数字被选择了,很方便也很快,代码如下 #include <cstdio> #in ...

  2. ACM学习历程—HDU5269 ZYB loves Xor I(位运算 && dfs && 排序)(BestCoder Round #44 1002题)

    Problem Description Memphis loves xor very musch.Now he gets an array A.The length of A is n.Now he ...

  3. UVA 10318 Security Panel(DFS剪枝 + 状压 + 思维)题解

    题意:给一个r*c的矩阵开关(初始全打开的),每次按下一个开关都会改变3*3范围内的有*的地方的状态,问你最少几步能让开关全闭上,按升序输出按哪些按钮 思路:每个按钮至多按一下,按按钮的顺序和结果无关 ...

  4. uva 10160 Servicing Stations(DFS+剪枝)

    Servicing stations A company offers personal computers for sale in N towns (3 <= N <= 35). The ...

  5. 牛客编程巅峰赛S2第10场 - 钻石&王者 C.牛牛的路径和 (位运算,dfs)

    题意:给你节点数为\(n\)的树,每个节点都有自己的权值,求所有路径的上的点的权值按位与的和. 题解:题目给的数据很大,我们不能直接去找.因此我们可以枚举二进制\([1,20]\)的每一位,然后再枚举 ...

  6. uva 818 (位运算 + 判环)

     Cutting Chains  What a find! Anna Locke has just bought several links of chain some of which may be ...

  7. UVA 11464 暴力+位运算 ***

    题意:给你一个 n * n 的 01 矩阵,现在你的任务是将这个矩阵中尽量少的 0 转化为 1 ,使得每个数的上下左右四个相邻的数加起来是偶数.求最少的转化个数. 新风格代码 lrj书上说的很清楚了, ...

  8. 洛谷 1219:八皇后 (位运算 & DFS)

    题目链接: https://www.luogu.org/problem/show?pid=1219#sub row:受上面的皇后通过列控制的位置 ld:受上面的皇后通过从右至左的斜对角线控制的位置 r ...

  9. Sticks(UVA - 307)【DFS+剪枝】

    Sticks(UVA - 307) 题目链接 算法 DFS+剪枝 1.这道题题意就是说原本有一些等长的木棍,后来把它们切割,切割成一个个最长为50单位长度的小木棍,现在想让你把它们组合成一个个等长的大 ...

随机推荐

  1. ASP.NET MVC (Umbraco)中如何设置网站超时自动退出

    原文章请参考  https://edgewebware.com/2014/06/automatically-log-out-members-send-login-page-umbraco/ 在网站开发 ...

  2. null, undefined 和布尔值

    说明:此类博客来自以下链接,对原内容做了标注重点知识,此处仅供自己学习参考! 来源:https://wangdoc.com/javascript/basic/introduction.html 1.n ...

  3. Fitnesse框架简单介绍

    1.Fitnesse是什么? 官方的说明:FitNesse is a wiki server. It's also a test execution engine. Fitnesse是一个wiki s ...

  4. appium+Java+testng自动化框架搭建-第一季

    app自动化越来越火,随着移动app的不断发展,手机端测试日益火爆,想成为一个高级软件测试工程师必须要掌握,那么我们今天就来搭建appium+Java+testng自动化测试框架. Appium环境搭 ...

  5. Keras实现CIFAR-10分类

      仅仅为了学习Keras的使用,使用一个四层的全连接网络对MNIST数据集进行分类,网络模型各层结点数为:3072: : 1024 : 512:10:   使用50000张图片进行训练,10000张 ...

  6. PV、UV、VV、IP是什么意思?

    PV.UV.VV.IP作为网站分析中最常见的基础指标,能够从宏观概括性地衡量网站的整体运营状况,也是检测网站运营是否正常的最直观的指标. 1.VV(来访次数/访问次数):VisitView 记录所有访 ...

  7. MySQL学习基础之一 — 数据库查询

    廖大神的练手神器:在线SQL: https://www.liaoxuefeng.com/wiki/1177760294764384/1179611432985088 运行MySQL等实际的数据库软件, ...

  8. 密码暴力破解工具acccheck使用

    title: acccheck categories: Password Attacks tags: [passwords,kali linux,acccheck,infogathering,pass ...

  9. Mac环境下制作ubantu安装盘

    前言:ubantu为Linux发行版之一,此方法亦可制作其他Linux发行版 1.在磁盘工具中将准备好的u盘格式化为Mac OS扩展(日志型),并确保分区的模式是GUID分区 2.官网自行下载uban ...

  10. SQL SERVER Study

    1. SQL SERVER Install    可以免费试用天.最新的是2014版本.   2. Attach, Detach 可以添加或去掉已有的数据库文件.     数据库文件的格式是: .md ...