在函数bound中的一行代码缺少了乘号,应该是:

b += v[i]/w[i] * cleft;

另外,在函数backtrack中,应该先判断是否已经达到了叶子节点(即t>=n),再进行后续操作,否则会出现数组越界的问题。正确的代码应该是:

void backtrack(int t, int* w, int* v, int W){ if(t>=n){ bestp = cp; output(x); return; // 添加此行代码 } if(cw+w[t]<=W){ x[t]=1; cw+=w[t]; cp+=v[t]; backtrack(t+1,w,v,W-cw); cw-=w[t]; cp-=v[t]; } if (bound(t+1,W-cw,cp,w,v)>bestp){ x[t]=0; backtrack(t+1,w,v,W-cw); } }

重试复制有什么可以帮你的吗假如你现在是一个很厉害的程序员我现在遇到一些程序的Bug 帮我找出来详细标注:#include iostreamusing namespace std;int w4=3521;int v4=91074;int n=4;int x4=0;int cp=0;int cw=0;int bestp=0;void outputint xforint i = 0; i n; i++

原文地址: https://www.cveoy.top/t/topic/cnql 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录