3 条题解

  • 0
    @ 2024-5-4 8:57:47

    课堂演示代码

    部分分做法-搜索全排列

    直接爆搜所有的全排列,时间复杂度是 O(n!)O(n!)

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=21,mod=998244353;
    int n,l,r,x,c[N];
    bool v[N];
    ll ans;
    void dfs(int i,int small,int big,int sum)
    //搜到第i个位置,之前的最低分是small,最高分是big,总分是sum 
    {
    	if(i>4 && small<=l && big>=r && sum>=x)
    		ans=(ans+1)%mod;
    	if(i>n)return;
    	for(int j=1;j<=n;j++)
    		if(v[j]==false)
    		{
    			v[j]=true;
    			dfs(i+1,min(small,c[j]),max(big,c[j]),sum+c[j]);
    			v[j]=false;
    		}
    }
    int main()
    {
    	ios::sync_with_stdio(0);cin.tie(0);
    	cin>>n>>l>>r>>x;
    	for(int i=1;i<=n;i++)cin>>c[i];
    	dfs(1,1e9,0,0);
    	cout<<ans;
    	return 0;
    }
    

    信息

    ID
    1413
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    181
    已通过
    30
    上传者