Submission #332640

#TimeUsernameProblemLanguageResultExecution timeMemory
332640daniel920712Skyscraper (JOI16_skyscraper)C++14
20 / 100
1345 ms250820 KiB
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;
bool have[16390][20][105]={0};
long long DP[16390][20][105]={0};
long long MOD=1e9+7;
long long all[20];
long long tt[20];
long long N,M;
long long F(long long x,long long y,long long z)
{
    long long i;
    //printf("%lld %lld\n",N,M);
    if(z>M) return 0;
    if(x==0) return 1;
    if(have[x][y][z]) return DP[x][y][z];
    have[x][y][z]=1;
    for(i=0;i<N;i++)
    {
        if(x&(1<<i))
        {
            DP[x][y][z]+=F(x-(1<<i),i,z+(long long) abs(all[i]-all[y]));
            DP[x][y][z]%=MOD;
        }
    }
    return DP[x][y][z];
}
int main()
{
    long long i,ans=0,x;
    scanf("%lld %lld",&N,&M);

    for(i=0;i<N;i++)
    {
        tt[i]=i;
        scanf("%lld",&all[i]);
    }
    if(N<=8)
    {
        x=0;
        do
        {
            x=0;
            for(i=1;i<N;i++) x+=abs(all[tt[i]]-all[tt[i-1]]);
            //printf("%lld\n",x);
            ans+=(x<=M);
        }while(next_permutation(tt,tt+N));
    }
    else
    {
        for(i=0;i<N;i++)
        {
            ans+=F(((1<<N)-1)-(1<<i),i,0);
            ans%=MOD;
        }
    }
    printf("%lld\n",ans);

    return 0;
}

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:36:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   36 |     scanf("%lld %lld",&N,&M);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~
skyscraper.cpp:41:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   41 |         scanf("%lld",&all[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...