Submission #93884

#TimeUsernameProblemLanguageResultExecution timeMemory
93884KLPPSkyscraper (JOI16_skyscraper)C++14
100 / 100
563 ms320180 KiB
#include<iostream> #include<algorithm> using namespace std; typedef long long int lld; #define MOD 1000000007 lld DP[101][2][2][101][1001]; int n,l; int arr[1001]; lld ans(int i, int L,int R , int CC, int pen){ if(i>0)pen+=(arr[i]-arr[i-1])*(2*CC+L+R); //cout<<pen<<endl; if(CC<0 || pen>l)return 0; if(i==n-1){ if(CC==0){ return 1; }return 0; } if(DP[i][L][R][CC][pen]!=-1)return DP[i][L][R][CC][pen]; DP[i][L][R][CC][pen]=0; DP[i][L][R][CC][pen]+=CC*(CC-1)*ans(i+1,L,R,CC-1,pen); DP[i][L][R][CC][pen]%=MOD; DP[i][L][R][CC][pen]+=2*CC*ans(i+1,L,R,CC,pen); DP[i][L][R][CC][pen]%=MOD; DP[i][L][R][CC][pen]+=ans(i+1,L,R,CC+1,pen); DP[i][L][R][CC][pen]%=MOD; DP[i][L][R][CC][pen]+=ans(i+1,1,R,CC,pen); DP[i][L][R][CC][pen]%=MOD; DP[i][L][R][CC][pen]+=ans(i+1,L,1,CC,pen); DP[i][L][R][CC][pen]%=MOD; DP[i][L][R][CC][pen]+=CC*ans(i+1,1,R,CC-1,pen); DP[i][L][R][CC][pen]%=MOD; DP[i][L][R][CC][pen]+=CC*ans(i+1,L,1,CC-1,pen); DP[i][L][R][CC][pen]%=MOD; return DP[i][L][R][CC][pen]; } int main(){ cin>>n>>l; for(int i=0;i<n;i++)cin>>arr[i]; sort(arr,arr+n); for(int i=0;i<=n;i++){ for(int j=0;j<=n;j++){ for(int k=0;k<=l;k++){ DP[i][0][0][j][k]=-1; DP[i][1][0][j][k]=-1; DP[i][0][1][j][k]=-1; DP[i][1][1][j][k]=-1; } } } cout<<ans(0,0,0,0,0)<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...