WA on test 4
查看原帖
WA on test 4
400783
Nephren_Sakura楼主2022/5/17 22:30

rt

#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
	int x=0,f=1;
	char ch=getchar();
	while (ch<'0'||ch>'9'){
		if (ch=='-')
			f=-1;
		ch=getchar();
	}
	while (ch>='0'&&ch<='9'){
		x=(x<<1)+(x<<3)+ch-48;
		ch=getchar();
	}
	return x*f;
}
inline void put(int x)
{
    if (x > 9) put(x / 10);
    putchar(x % 10 + 48);
}
int n=read(),k=read(),s=read(),ans,a[1000005];
unordered_map<int,int> mp[1000005];
int hp(int x){
	int res=1;
	for(int i=2; i<=x; i++)
		res*=i;
	return res;
}
void dfs(int nw_cur,int nw_k,int nw_sum){
	if(nw_k>k||nw_sum>s)
		return;
	if(nw_cur>n/2){
//		if(nw_k<=k&&nw_sum==s)
//			ans++;
		mp[nw_k][nw_sum]++;
		return;
	}
	if(a[nw_cur]<=19)
		dfs(nw_cur+1,nw_k+1,nw_sum+hp(a[nw_cur]));
	dfs(nw_cur+1,nw_k,nw_sum);
	dfs(nw_cur+1,nw_k,nw_sum+a[nw_cur]);
}
void dfs2(int nw_cur,int nw_k,int nw_sum){
	if(nw_k>k||nw_sum>s)
		return;
	if(nw_cur>n){
//		if(nw_k<=k&&nw_sum==s)
//			ans++;
		for(int i=0; i<=k-nw_k; i++)
			ans+=mp[i][s-nw_sum];
		return;
	}
	if(a[nw_cur]<=19)
		dfs2(nw_cur+1,nw_k+1,nw_sum+hp(a[nw_cur]));
	dfs2(nw_cur+1,nw_k,nw_sum);
	dfs2(nw_cur+1,nw_k,nw_sum+a[nw_cur]);
}
signed main(){
	for(int i=1; i<=n; i++)
		a[i]=read();
	for(int i=1; i<=n/2; i++)
	dfs(1,0,0);
	dfs2(n/2+1,0,0);
	cout<<ans;
	return 0;
}



2022/5/17 22:30
加载中...