| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1346497 | StefanSebez | Skyscraper (JOI16_skyscraper) | C++20 | 609 ms | 167948 KiB |
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
const int N=105,mod=1e9+7;
int n,L,a[N];
map<int,ll>dp[N][N][2][2];
int main(){
scanf("%i%i",&n,&L);
for(int i=1;i<=n;i++)scanf("%i",&a[i]);
if(n==1){printf("1\n");return 0;}
sort(a+1,a+n+1);
dp[1][1][0][0][-2*a[1]]=1;
dp[1][1][1][0][-a[1]]=1;
dp[1][1][0][1][-a[1]]=1;
for(int i=2;i<=n;i++){
for(int j=0;j<=n;j++)for(int l=0;l<=1;l++)for(int r=0;r<=1;r++)for(auto [sum,x]:dp[i-1][j][l][r]){
if(sum+(2*j-l-r)*a[i]>L)continue;
dp[i][j][l][r][sum]+=(2*j-l-r)*x;
if(!l)dp[i][j][1][r][sum+a[i]]+=x;
if(!r)dp[i][j][l][1][sum+a[i]]+=x;
dp[i][j+1][l][r][sum-2*a[i]]+=(j+1-l-r)*x;
if(!l)dp[i][j+1][1][r][sum-a[i]]+=x;
if(!r)dp[i][j+1][l][1][sum-a[i]]+=x;
if(j>1)dp[i][j-1][l][r][sum+2*a[i]]+=(j-1)*x;
}
for(int j=0;j<=n;j++)for(int l=0;l<=1;l++)for(int r=0;r<=1;r++)for(auto &x:dp[i][j][l][r]){
x.se%=mod;
}
}
ll res=0;
for(int l=L;l>=0;l--)res+=dp[n][1][1][1][l];
res%=mod;
printf("%lld\n",res);
return 0;
}Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
