标题:一道想用暴力搜索的题目,提交显示答案错误,求帮忙看看错在哪里?
只看楼主
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
 问题点数:0 回复次数:0 
一道想用暴力搜索的题目,提交显示答案错误,求帮忙看看错在哪里?
一共有10个节点,选择一定数量的节点使得权值总和最大,输出最大权值和。
输入:
第1行一个M,表示有M个顺序关系(保证不会有环)
接下来M行每行有两个数u,v,表示要想选择节点v必须先选择节点u。
第M+2行十个数,表示S1到S10,每个节点的权值。
最后M+3行一个K,表示选择节点的个数。

输出:
输出权值和的最大值。

我的代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;

int M,u,v,K,visited[12],ans;
vector<int> root[12];

struct node{
  int number;
  int score;
}a[12];

void dfs(int x,int sum){
    int i,j,flag;
    if(x==K+1){
      ans=max(ans,sum);
      return;
    }
    for(i=1;i<=10;i++){
        if(!visited[a[i].number]){
            flag=0;
            for(j=0;j<root[a[i].number].size();j++){
                if(!visited[root[a[i].number][j]]){
                    flag=1;
                    break;
                }
            }
            if(flag==0){
                visited[a[i].number]=1;
                dfs(x+1,sum+a[i].score);
                visited[a[i].number]=0;
            }
        }
    }
}
            
int main(void){
    int i;
    while(scanf("%d",&M)!=EOF){
       for(i=0;i<=M;i++){
         root[i].clear();
       }
       for(i=1;i<=M;i++){
            scanf("%d %d",&u,&v);
            root[v].push_back(u);
       }
       for(i=1;i<=10;i++){
         scanf("%d",&a[i].score);
         a[i].number=i;
     }
       scanf("%d",&K);
       ans=-1;
       memset(visited,0,sizeof(visited));
       dfs(1,0);
       printf("%d\n",ans);
    }
    return 0;
}

由于这道题数据很小(10个节点),所以想到了暴力搜索,但是提交后显示答案错误,求大佬帮忙看一下哪里有问题?
如果有更好的方法,也希望大佬们提出来。


        
搜索更多相关主题的帖子: 节点 include int number for 
2018-08-27 20:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489457-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.064541 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved