还有哪可以优化优化的?(这题数据这么水还t了。。。我太菜了)
#include<iostream>
#include<cstring>
using namespace std;
int a[30], b[30], c[20][30], res1[20], res2[20], v, g, ans1 = 0, ans2 = 0, f = 1;
//a:标准 b:实际 c:食品参数 res1:上一个最佳答案 res2:本次搜索得到的最佳答案 f:输出标记
bool d[20];
//d:食品标记
void print(){
for(int i = 0; i <= res1[0]; i++){
if(!f) cout << " ";
else f = 0;
cout << res1[i];
}
}
int pd(){
for(int i = 1; i <= v; i++)
if(b[i] < a[i]) return 0;
return 1;
}
void dfs(int k){
for(int i = 1; i <= g; i++){
if(!d[i]){
d[i] = 1;
ans2++;
res2[k] = i;
for(int j = 1; j <= v; j++) //计算
b[j] += c[i][j];
if(pd()){
if(ans2 < ans1 || ans1 == 0){
memcpy(res1, res2, sizeof(res1));
ans1 = ans2;
res1[0] = ans1;
}
}
else
dfs(k + 1);
d[i] = 0;
ans2--;
res2[k] = 0;
for(int j = 1; j <= v; j++)
b[j] -= c[i][j];
}
}
}
int main(){
cin >> v;
for(int i = 1; i <= v; i++)
cin >> a[i];
cin >> g;
for(int i = 1; i <= g; i++)
for(int j = 1; j <= v; j++)
cin >> c[i][j];
// for(int i = 1; i <= g; i++){
// cout << i;
// for(int j = 1; j <= v; j++)
// cout << " " << c[i][j];
// cout << endl;
// }
dfs(1);
print();
return 0;
}