42 分代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int t,x,y,k,a[32];
int m;
int dfs(int i,int m,int ans);
signed main(){
scanf("%lld",&t);
while(t--){
scanf("%lld%lld%lld",&x,&y,&k);
m=abs(x-y);
for(int i=0;i<=k;i++) scanf("%d",&a[i]),a[i]=i>0?min(a[i],a[i-1]*2):a[i];
printf("%lld\n",dfs(k,m,0));
}
return 0;
}
int dfs(int i,int m,int ans){
if(!m || i<0) return ans;
ans+=(m/(1<<i))*a[i];
m%=(1<<i);
return min(dfs(i-1,m,ans),dfs(i-1,(1<<i)-m,ans+a[i]));
}
想知道怎么把 dfs 优化掉