#include<cstdio>
using namespace std;
const int N=100; int n,c,ans,a[N]; long long pre[N];
inline int read() {
int x=0; char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); }
return x;
}
inline void write(int x) {
if(x>=10) write(x/10);
putchar(x%10+'0');
}
inline void dfs(int step,long long sum) {
if(sum>c||sum+pre[step]<=ans) return;
if(!step) return (ans<sum?ans=sum:ans=ans),void();
dfs(step-1,sum),dfs(step-1,sum+a[step]);
}
int main() {
n=read(),c=read();
for(register int i=1;i<=n;i++) a[i]=read(),pre[i]=pre[i-1]+a[i];
dfs(n,0);
write(ans);
return 0;
}
以上代码会 TLE。
然而把 dfs(step-1,sum),dfs(step-1,sum+a[step]); 改成 dfs(step-1,sum+a[step]),dfs(step-1,sum); 就能 AC。
为什么?