C++回溯法我的代码是没有回溯吗?为什么出来的不是46或者226?而且还段错误? - 爱问答

(爱问答)

C++回溯法我的代码是没有回溯吗?为什么出来的不是46或者226?而且还段错误?

题目是回溯法的子集和问题C++ 回溯法 我的代码是没有回溯吗?为什么出来的不是 4 6 或者 2 2 6?而且还段错误?

代码:

#include<iostream>

using namespace std;

int a[1001];

int b[1001];

int x[1001];

int nsum;

int n, c;

int k;

 

void subsetsum(int t){

     if( t > n ){

          if(nsum == c){

                k = 1;

                return;

          }

    }

 

    else {

        if(nsum + a[t] <= c) {

              nsum += a[t];

              x[t] = 1;

              subsetsum(t + 1) ;

              nsum -= a[t];

        }

    if(nsum + a[t] > c){

           x[t] = 0;

           subsetsum(t+1) ;

     }

  }

 

}

 

int main(){

cin >> n >> c;

for(int i=1; i<=n; i++){

     cin >> a[i];

     b[i] = a[i];

}

subsetsum(1);

if(k == 1){

     for(int i=1; i<=n; i++){

          if(x[i] == 1)  cout << b[i] << " ";

     }

}

else cout << "No Solution!" << endl;

return 0;

}


v[j]=1;backtrack(i+1,total+c[i][j]);v[j]=0;//这一步是什么意思啊?v[j]的作用应该是记录第j个工作是否被分配。v[j]=0代表它没被分配。您这个题目最好使用动态规划来求解,可以参见背包问题。

下一篇:使用结构体数组存储5个学生的信息,然后输入一个学生的姓名,在数组中查找该学生的信

上一篇:我的移动硬盘变成RAW怎么恢复

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?