Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37070 | 22级廖思学 | 【S】T1 | C++ | 运行超时 | 40 | 1000 MS | 256 KB | 935 | 2025-03-02 15:22:50 |
#include<bits/stdc++.h> using namespace std; #define int long long const int N=20; int id,T,m,a,b,c,d,fac[N],ans; bool ch[N]; void cal(){ int cnt=0;int mm=m; for(int i=1;i<=14;i++){ if(ch[i]){mm-=fac[i];cnt+=a+i*b;} } if(mm<0)return; if(mm==0){ans=min(ans,cnt);return;} // cout<<endl; int k=__lg(mm);//cout<<mm<<">>>>>"<<k<<endl; for(int i=k;i>=0;i--){ if((1<<i)&mm){mm-=(1<<i);cnt+=c+i*d;} }//cout<<endl; // cout<<ans<<" "; ans=min(ans,cnt); // cout<<cnt<<" "<<ans<<endl; } void dfs(int i){ if(fac[i]>m){cal();return;} ch[i]=0;dfs(i+1); ch[i]=1;dfs(i+1); } signed main(){ fac[0]=1;for(int i=1;i<=14;i++)fac[i]=fac[i-1]*i; scanf("%lld%lld",&id,&T); while(T--){ scanf("%lld",&m); scanf("%lld%lld%lld%lld",&a,&b,&c,&d); ans=1e17;dfs(1); printf("%lld\n",ans); } return 0; }