zoukankan      html  css  js  c++  java
  • BZOJ 1198: [HNOI2006]军机调度(搜索)

    直接暴搜就行了= =

    CODE:

    #include<cstdio>

    #include<iostream>

    #include<cstring>

    #include<algorithm>

    using namespace std;

    int count(int x) {

    int ans=0;

    while (x) {

    ans+=x&1;

    x>>=1;

    }

    return ans;

    }

    #define maxn 35

    int b[maxn],e[maxn],r[maxn],ans,n,m,p[maxn],s[maxn];

    bool a[maxn][maxn],is[maxn][maxn];

    int dfs(int x,int sum) {

    if (sum>ans) ans=sum;

    if (x==m+1) return 0;

    dfs(x+1,sum);

    int tot=0,s[maxn];

    for (int i=1;i<=n;i++) 

    if (a[i][x]) {

    bool flag=1;

    for (int j=b[x];j<=e[x];j++)

    if (is[i][j]) {flag=0;break;}

    if (flag) s[++tot]=i;

    }

    if (tot<p[x]) return 0;

    for (int i=1;i<(1<<tot);i++) {

    if (count(i)!=p[x]) continue;

    for (int j=1;j<=tot;j++) {

    if ((1<<(j-1))&i){

    int y=s[j];

    for (int k=b[x];k<=e[x];k++) is[y][k]=1;

    }

    }

    dfs(x+1,sum+r[x]);

    for (int j=1;j<=tot;j++) {

    if ((1<<(j-1))&i){

    int y=s[j];

    for (int k=b[x];k<=e[x];k++) {is[y][k]=0;}

    }

    }

    }

    return 0;

    }

    int main(){

    scanf("%d%d",&n,&m);

    for (int i=1;i<=n;i++) {

    int x;

    scanf("%d",&x);

    for (int j=1;j<=x;j++) {

    int y;

    scanf("%d",&y);

    a[i][y]=1;

    }

    }

    for (int i=1;i<=m;i++) {

    scanf("%d%d%d%d",b+i,e+i,p+i,r+i);

    }

    dfs(1,0);

    printf("%d",ans);

    return 0;

    }


  • 相关阅读:
    git clone代码总是失败
    sublime常用快捷键及插件
    canvas圆形倒计时
    box-show的用法
    全选、反选
    数据库,增删改查
    PHP操作MySQL
    输出六个随机字符串
    约瑟夫环的故事
    Unix编程艺术——摘录一
  • 原文地址:https://www.cnblogs.com/New-Godess/p/4348906.html
Copyright © 2011-2022 走看看