一个关于程序效率的问题
  • 板块学术版
  • 楼主xsmfollower
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/1 09:21
  • 上次更新2024/4/1 14:17:31
查看原帖
一个关于程序效率的问题
1308728
xsmfollower楼主2024/4/1 09:21
#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。

为什么?

2024/4/1 09:21
加载中...