为什么下面这段代码就会TLE呢?
80分:
#include<bits/stdc++.h>
using namespace std;
struct node{
int a;
int b;
}shi[31];
int m,v,minn=100000,ga,gb;
bool used[31];
void dfs(int deep){
if(minn==0){
return;
}
if(ga+gb>=v){
minn=min(abs(ga-gb),minn);
}
for(int i=deep;i<=m;i++){
if(used[i]==0){
used[i]=1;
ga+=shi[i].a;
gb+=shi[i].b;
dfs(i+1);
ga-=shi[i].a;
gb-=shi[i].b;
used[i]=0;
}
}
if(minn==100000){
minn=-1;
return ;
}
return ;
}
int main(){
scanf("%d%d",&m,&v);
for(int i=1;i<=m;i++){
scanf("%d%d",&shi[i].a,&shi[i].b);
}
dfs(0);
printf("%d",minn);
return 0;
}
AC:
#include<bits/stdc++.h>
using namespace std;
struct node{
int a;
int b;
}shi[31];
int m,v,minn=100000,ga,gb;
bool used[31];
void dfs(int deep){
if(minn==0){
return;
}
if(ga+gb>=v){
minn=min(abs(ga-gb),minn);
}
for(int i=deep;i<=m;i++){
if(used[i]==0){
used[i]=1;
ga+=shi[i].a;
gb+=shi[i].b;
dfs(i+1);
ga-=shi[i].a;
gb-=shi[i].b;
used[i]=0;
}
}
return ;
}
int main(){
scanf("%d%d",&m,&v);
for(int i=1;i<=m;i++){
scanf("%d%d",&shi[i].a,&shi[i].b);
}
dfs(0);
if(minn==100000){
printf("-1");
return 0;
}
printf("%d",minn);
return 0;
}