zoukankan      html  css  js  c++  java
  • POJ 2531 深搜剪枝

    题意:全局最大割。

    分析:有相应的算法,数据量很小,可以枚举源点,汇点,最大流。

    这里用DFS,状态定义:分成两个集合,刚开始S集合全部点,然后一个一个放,这是一个回溯的过程。

    没剪枝也过了。

    剪枝技巧:当前这个节点放到T集合,比之前还小,那么一定,这个点不在T集合里面。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 
     6 using namespace std;
     7 
     8 const int maxn = 20 + 5;
     9 int n;
    10 int a[maxn][maxn];
    11 int dep[maxn];
    12 
    13 int ans;
    14 
    15 
    16 void dfs(int u,int m) {
    17     dep[u] = 1;
    18     int tmp = m;
    19 
    20     for(int i=0;i<n;i++) {
    21         if(dep[i]==0)
    22             m+=a[i][u];
    23         else m-=a[i][u];
    24     }
    25 
    26     if(m>ans)
    27         ans = m;
    28 
    29     for(int i=u+1;i<n;i++) {
    30         if(m > tmp) {
    31             dfs(i,m);
    32             dep[i] = 0;
    33         }
    34     }
    35 }
    36 
    37 int main()
    38 {
    39     scanf("%d",&n);
    40 
    41     for(int i=0;i<n;i++) {
    42         for(int j=0;j<n;j++) {
    43             scanf("%d",&a[i][j]);
    44         }
    45     }
    46 
    47     memset(dep,0,sizeof(dep));
    48 
    49     ans = 0;
    50     dfs(0,0);
    51     printf("%d
    ",ans);
    52 
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    debian 登录CUPS 管理界面报错
    Shell脚本调试技术
    贴个ALSA例程
    产业生态圈和生态圈
    开个帖,开始学习shell编程
    Lua源码阅读建议
    Flash, EEPROM, SPI Flash diff
    makefile中的notdir,wildcard和patsubst
    quartus II使用零星记录
    Hello ZED
  • 原文地址:https://www.cnblogs.com/TreeDream/p/7207894.html
Copyright © 2011-2022 走看看