Submission #744951

#TimeUsernameProblemLanguageResultExecution timeMemory
744951sword060Magneti (COCI21_magneti)C++17
0 / 110
1077 ms442316 KiB
#include <bits/stdc++.h> using namespace std; const int N=10005,M=1e9+7; int x,k,dp[N][1<<10][11],dp2[N][51],a[N]; int rec(int i,int msk,int lst){ if(i>k)return 0; if((msk^(1<<lst))==0)return k-i+1; if(~dp[i][msk][lst])return dp[i][msk][lst]; int ret=rec(i+1,msk,lst)%M; for(int nxt=0;nxt<x;nxt++) if(msk&(1<<nxt)) ret=(ret+rec(i+max(a[lst+1],a[nxt+1]),msk^(1<<lst),nxt))%M; return dp[i][msk][lst]=ret; } int rec2(int i,int j){ if(j==0)return 1; if(i>k)return 0; if(~dp2[i][j])return dp2[i][j]; int ret=(((rec2(i+a[1],j-1)*j)%M)+(rec2(i+1,j)%M))%M; return dp2[i][j]=ret; } int main(){ ios::sync_with_stdio(0);cin.tie(0); cin>>x>>k; for(int i=1;i<=x;i++)cin>>a[i]; if(x<=10){ memset(dp,-1,sizeof(dp)); long long sum=0; for(int i=0;i<x;i++)sum=(sum+rec(1,(1<<x)-1,i))%M; cout<<sum; }else{ memset(dp2,-1,sizeof(dp2)); cout<<rec2(1,x); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...