码迷,mamicode.com
首页 > 其他好文 > 详细

Luogu P2196 挖地雷

时间:2020-02-11 09:58:56      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:++   for   def   include   check   clu   sum   lib   efi   

https://www.luogu.com.cn/problem/P2196

solution

记录挖掘最优路径

#include<cmath>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 2147483647
int n,c,Ans=-1,cnt; //cnt路径长度
bool vis[21];
int a[21],p[21][21],w[21],b[21];  //w[i]记录路径,b[i]记录答案路径
//路径是单向的
bool check(int x){
  for(int i=1;i<=n;i++)
    if(p[x][i]==1)return true;
  return false;
}
void dfs(int x,int sum,int Depth){
  if(!check(x)){
    if(sum>Ans){
      cnt=Depth;
      Ans=sum;
      for(int i=1;i<=Depth;i++)b[i]=w[i];
      return;
    }
    else return;
  }
  for(int i=1;i<=n;i++){
    if(!vis[i]&&p[x][i]==1){
      vis[i]=1;
      w[Depth+1]=i;
      dfs(i,sum+a[i],Depth+1);
      vis[i]=0;
    }
  }
}
int main(){
  cin>>n;
  for(int i=1;i<=n;i++) cin>>a[i];
  for(int i=1;i<=n-1;i++){
    for(int j=1;j<=n-i;j++){
      cin>>c;
      if(c==1)p[i][i+j]=1;
    }
  }
  for(int i=1;i<=n;i++){
    w[1]=i;
    dfs(i,a[i],1);
  }
  for(int i=1;i<=cnt;i++)cout<<b[i]<<" ";
  cout<<endl;
  cout<<Ans<<endl;
  return 0;
}

Luogu P2196 挖地雷

标签:++   for   def   include   check   clu   sum   lib   efi   

原文地址:https://www.cnblogs.com/KingBenQi/p/12293547.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!