Submission #68075

#TimeUsernameProblemLanguageResultExecution timeMemory
68075dualitySkyscraper (JOI16_skyscraper)C++11
20 / 100
908 ms95944 KiB
#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pb push_back
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<pii> vpii;
#define MOD 1000000007

int A[100];
int *dp[1 << 14][14];
int main() {
    int i;
    int N,L;
    scanf("%d %d",&N,&L);
    for (i = 0; i < N; i++) scanf("%d",&A[i]);

    int j,k,l;
    for (i = 0; i < (1 << N); i++) {
        for (j = 0; j < N; j++) {
            dp[i][j] = new int[L+1];
            fill(dp[i][j],dp[i][j]+L+1,0);
        }
    }
    for (i = 0; i < N; i++) dp[1 << i][i][0] = 1;
    for (i = 0; i < (1 << N); i++) {
        vi v;
        for (j = 0; j < N; j++) {
            if (i & (1 << j)) v.pb(j);
        }
        if (v.size() >= 2) {
            for (j = 0; j <= L; j++) {
                for (k = 0; k < v.size(); k++) {
                    for (l = 0; l < v.size(); l++) {
                        if (k != l) {
                            if (j >= abs(A[v[k]]-A[v[l]])) {
                                dp[i][v[k]][j] += dp[i^(1 << v[k])][v[l]][j-abs(A[v[k]]-A[v[l]])];
                                dp[i][v[k]][j] %= MOD;
                            }
                        }
                    }
                }
            }
        }
    }
    int s = 0;
    for (i = 0; i < N; i++) {
        for (j = 0; j <= L; j++) s += dp[(1 << N)-1][i][j],s %= MOD;
    }
    printf("%d\n",s);


    return 0;
}

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:33:31: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                 for (k = 0; k < v.size(); k++) {
                             ~~^~~~~~~~~~
skyscraper.cpp:34:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
                     for (l = 0; l < v.size(); l++) {
                                 ~~^~~~~~~~~~
skyscraper.cpp:15:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d",&N,&L);
     ~~~~~^~~~~~~~~~~~~~~
skyscraper.cpp:16:34: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     for (i = 0; i < N; i++) scanf("%d",&A[i]);
                             ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...