求助RE on test9
查看原帖
求助RE on test9
882187
zmrdlgzh楼主2023/10/6 08:25
#include<bits/stdc++.h>
using namespace std;
#define ll long long
map<ll,ll> m1[100],m2[100];
ll n,k,s;
ll ans,flag,a[40],cnt1,cnt2,t1,t2;
ll fac[30];
void dfs1(ll idx,ll sum,ll cntk){
	if(sum>s) return;
	if(cntk>k) return ;
	if(idx>n/2){
		m1[cntk][sum]++;
		return;
	}
	dfs1(idx+1,sum,cntk);
	dfs1(idx+1,sum+a[idx],cntk);
	if(cntk<=20)dfs1(idx+1,sum+fac[a[idx]],cntk+1);
} 
void dfs2(ll idx,ll sum,ll cntk){
	if(sum>s) return;
	if(cntk>k) return ;
	if(idx>n){
		m2[cntk][sum]++;
		return;
	}
	dfs2(idx+1,sum,cntk);
	dfs2(idx+1,sum+a[idx],cntk);
	if(cntk<=20)dfs2(idx+1,sum+fac[a[idx]],cntk+1);
}
int main(){
	scanf("%lld%lld%lld",&n,&k,&s);
	fac[1]=1;
	for(ll i=2;i<=20;i++){
		fac[i]=fac[i-1]*i;
		//cout<<fac[i]<<endl;
	}  
	fac[0]=0;
	for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);
	dfs1(1,0,0);
	dfs2(n/2+1,0,0);
	for(ll i=0;i<=k;i++){
		for(ll j=0;j<=s;j++){
			//if(m1[i][j]*m2[k-i][s-j]==s) ans+=m1[i][j]*m2[k-i][s-j];
			for(ll ii=k-i;ii>=0;ii--) ans+=m1[i][j]*m2[ii][s-j];
		}
	}
	cout<<ans<<endl;
	return 0;
}
2023/10/6 08:25
加载中...