zoukankan      html  css  js  c++  java
  • NOIP1998提高组——挖地雷

    【题目描述】:
    挖地雷

    思路:
    水题一道。。
    本来是拿来练习(DAG)(DP)的,然后想了半天,一怒之下打了暴力A了(233)
    NAIVE
    因为起点不确定,所以应该枚举每一个点为起点,然后去(dfs),然后用前驱数组记录路径。。
    然后我就觉得没说的了。。

    //created by lajioj
    #include<cstdio>
    using namespace std;
    
    int n;
    const int MAXN = 25;
    int a[MAXN];
    
    struct edge{
        int u,v,nxt;
    }e[MAXN*MAXN];int head[MAXN];int cnt=0;bool vis[MAXN];int maxx = 0;int pre[MAXN];int rel[MAXN];int y = 0;
    
    inline void add(int u,int v){
        e[++cnt].u = u;e[cnt].v = v;e[cnt].nxt = head[u];head[u] = cnt;
    }
    
    inline void dfs(int u,int ans){
        vis[u] = 1;
        
        ans += a[u];
        for(int i=head[u];i;i=e[i].nxt){
            int v = e[i].v;
            if(vis[v]) continue;
            pre[v] = u;
            dfs(v,ans);
            vis[v] = 0;
        }
        
        if(ans > maxx){
            maxx = ans;
            y = 0;
            rel[++y] = u;
            for(int i=pre[u];i;i=pre[i]) rel[++y] = i;//这个才是真的路径数组,大则更新
        }
    }
    
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;++i) scanf("%d",&a[i]);
        for(int i=1;i<=n-1;++i){
            for(int j=i+1;j<=n;++j){
                int x;scanf("%d",&x);
                if(x == 1) add(i,j);
            }
        }
        
        for(int i=1;i<=n;++i) dfs(i,0);
        for(int i=y;i>=1;--i) printf("%d ",rel[i]);puts("");printf("%d",maxx);
        return 0;
    } 
    

    (lajioj) (is) (so) (NAIVE)

  • 相关阅读:
    linux三剑客之一:grep详细介绍
    Linux less命令:查看文件内容
    django-crontab执行定时任务
    mahout的数据处理--【根据文本文件创建vector】
    hbase编程demo
    hive0.11安装与配置
    hadoop1.1.2升级1.2.1
    hadoop 1.1.2和 hive 0.10 和hbase-0.94.10-security整合
    hbase配置
    hbase与storm的冲突
  • 原文地址:https://www.cnblogs.com/lajioj/p/9539396.html
Copyright © 2011-2022 走看看