TLE on #20
查看原帖
TLE on #20
1339022
123456Zhe楼主2025/7/22 09:16
#include<bits/stdc++.h>
using namespace std;

int n,k;
long long s,a[26],cnt;
map<pair<long long,int>,int> mp;
long long jie(long long x){
    long long res=1;
    for(int i=1;i<=x;i++){
        res*=i;
    }
    return res;
}
void dfs1(int w,int y,long long sum){
    if(sum>s||y>k)return;
    if(w==n/2){
        mp[{sum,y}]++;
        return;
    }
    dfs1(w+1,y,sum);
    dfs1(w+1,y,sum+a[w]);
    long long t=jie(a[w]);
    if(t&&y<k){
        dfs1(w+1,y+1,sum+t);
    }
}
void dfs2(int w,int y,long long sum){
    if(sum>s||y>k)return;
    if(w==n){
        for(int i=0;i+y<=k;i++){
            if(mp.count({s-sum,i})){
                cnt+=mp[{s-sum,i}];
            }
        }
        return;
    }
    dfs2(w+1,y,sum);
    dfs2(w+1,y,sum+a[w]);
    long long t=jie(a[w]);
    if(t&&y<k){
        dfs2(w+1,y+1,sum+t);
    }
}
int main(){
    cin>>n>>k>>s;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    dfs1(0,0,0);
    dfs2(n/2,0,0);
    cout<<cnt;
    return 0;
}

(在vjudge测的)

2025/7/22 09:16
加载中...