洛谷 P2196 挖地雷 & [NOIP1996提高组](搜索,记录路径)

传送门


解题思路

就是暴力!!!

没什么好说的,总之,就是枚举每一个起点,然后暴力算一遍以这个点为起点的所有路径,在算的过程中,只要比目前找到的答案更优,就有可能是最后的答案,于是就把路径更新一遍,保证不错过正确答案。

由于数据很水<21,所以放心暴力!

AC代码

 1 #include<iostream>
 2 #include<cstring>
 3 using namespace std;
 4 int n,m[21][21],maxx[21];
 5 int a[21],sans[21],now[21],ans,nows;
 6 void dfs(int x,int value,int step){
 7     now[step]=x;
 8     if(value>ans){
 9         for(int i=1;i<=step;i++) sans[i]=now[i];
10         ans=value;
11         nows=step;
12     }
13     maxx[x]=a[x];
14     for(int i=1;i<=n;i++){
15         if(m[x][i]&&maxx[i]==-1){
16             dfs(i,value+a[i],step+1);
17             maxx[i]=-1;
18         }
19     }
20 }
21 int main()
22 {
23     cin>>n;
24     for(int i=1;i<=n;i++) cin>>a[i];
25     for(int i=1;i<=n;i++){
26         for(int j=i+1;j<=n;j++){
27             char c;
28             cin>>c;
29             if(c=='1') m[i][j]=1;
30         }
31     }
32     for(int i=1;i<=n;i++){
33         memset(maxx,-1,sizeof(maxx));
34         dfs(i,a[i],1);
35     }
36     for(int i=1;i<=nows;i++) cout<<sans[i]<<" ";
37     cout<<endl<<ans;
38     return 0;
39 }

//NOIP1996提高组 t3

猜你喜欢

转载自www.cnblogs.com/yinyuqin/p/11854206.html