本地过,cf提交tle
查看原帖
本地过,cf提交tle
632359
wjh213楼主2023/7/19 14:42
#include<bits/stdc++.h>
#define int long long
using namespace std;
long long a[30];
long long n,k,s;
struct node{
	long long jc,sum;
};
bool operator<(node t1,node t2){
	return t1.jc==t2.jc?t1.sum<t2.sum:t1.jc<t2.jc;
}
map<node,long long> M;
map<long long,long long> M2;
long long ans=0;
long long jie(long long t1){
	if(M2.find(t1)!=M2.end()){
		return M2[t1];
	}
	long long ans=1;
	for(int i=1;i<=t1;i++){
		ans*=i;
	}
	M2[t1]=ans;
	return ans;
}
void dfs1(int now,int up,int jc,long long sum){
	if(jc>k||sum>s)return;
	if(now>up){
		//cout<<sum<<" "<<now<<endl;
		M[node{jc,sum}]++;
		return; 
	}
	
	dfs1(now+1,up,jc+1,sum+jie(a[now]));
	dfs1(now+1,up,jc,sum+a[now]);
	dfs1(now+1,up,jc,sum);
}
map<node,long long> MM;
long long qwe(int t1,int t2){
//	cout<<;
	if(t1<0)return 0;
	if(MM.find(node{t1,t2})!=MM.end()){
		return MM[node{t1,t2}];
	}
	long long answ=0;
	if(M.find(node{t1,t2})!=M.end()){
		answ+=M[node{t1,t2}];	
	}
//	long long temp=ans;
	answ+=qwe(t1-1,t2);
//	cout<<temp<<" "<<t1<<" "<<t2 <<" "<<ans<<" "<<qwe(t1-1,t2)<<endl;
	MM[node{t1,t2}]=answ;
	return  answ;
}
void dfs2(int now,int up,int jc,long long sum){
	if(jc>k||sum>s)return;
	if(now<up){
		ans+=qwe(k-jc,s-sum);
//		cout<<qwe(k-jc,s-sum)<<" ";
//		for(int i=k-jc;i>=0;i--){
////			cout<<i<<" "<<(s-sums)<<" "<<(M[node{i,s-sum}])<<endl;
////			ans+=M[node{i,s-sum}];
//			qwe()
//		}
		return; 
	}
	
	dfs2(now-1,up,jc+1,sum+jie(a[now]));
	dfs2(now-1,up,jc,sum+a[now]);
	dfs2(now-1,up,jc,sum);
}
signed main(){
	ios::sync_with_stdio(false);
//	freopen("test.in","r",stdin);
	cin>>n>>k>>s;
//	if(s==(long long)13326087796){
//		cout<<1;
//		return 0;
//	}
	for(int i=1;i<=n;i++){
		cin>>a[i];
//		scanf("%lld",&a[i]);
	}	
	int mid=n/2;
	dfs1(1,mid,0,0);
//	cout<<qwe(0,24);
	dfs2(n,mid+1,0,0);
	cout<<ans;
	return 0;
} 

tle了第20个点,数据是

25 16 13326087796
157576937 627434432 942652043 706432863 631136945 714549755 465703470 663358517 695561723 249240606 833566455 396564536 758483017 253748999 978210764 530023233 193812243 317718202 184788435 892848108 150420430 330992298 780787784 196460118 674015883

在本地可以跑过,试了下洛谷的在线IDE也会tle,不清楚是哪里的问题

2023/7/19 14:42
加载中...