/ SeriousOJ /

Record Detail

Memory Exceeded


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 320.0 KiB
#2 Accepted 1ms 532.0 KiB
#3 Accepted 6ms 576.0 KiB
#4 Accepted 195ms 53.461 MiB
#5 Accepted 267ms 107.953 MiB
#6 Accepted 234ms 54.391 MiB
#7 Memory Exceeded ≥1119ms ≥128.016 MiB
#8 Memory Exceeded ≥1118ms ≥128.016 MiB
#9 Accepted 3ms 1.062 MiB
#10 Memory Exceeded ≥1114ms ≥128.016 MiB
#11 Accepted 2ms 764.0 KiB
#12 Memory Exceeded ≥1118ms ≥128.016 MiB
#13 Memory Exceeded ≥1120ms ≥128.016 MiB
#14 Accepted 100ms 14.734 MiB
#15 Memory Exceeded ≥1113ms ≥128.016 MiB

Code

#include <bits/stdc++.h>
using namespace std;
#define ll int
#define all(x) (x).begin(), (x).end()
#define f(i, n) for (int i = 0; i < n; i++)
#define trace(x) cerr << #x << ": " << x << '\n'
const int M = 1e9 + 7;
ll n, k;
vector<vector<vector<ll>>> dp;

ll fun(ll i, ll s, ll f, vector<ll> &v)
{
    if (i == n)
    {
        return f and s >= k;
    }

    if (dp[i][s][f] != -1)
    {
        return dp[i][s][f];
    }

    ll ans = 0;
    ans += fun(i + 1, s, 1, v);
    ans %= M;

    ans += fun(i + 1, s + v[i], f, v);
    ans %= M;

    return dp[i][s][f] = ans;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int t;
    cin >> t;
    while (t--)
    {
        cin >> n >> k;
        vector<ll> v(n);
        ll maxSum = 0;
        for (auto &a : v)
        {
            cin >> a;
            maxSum += a;
        }
        if (maxSum < k)
        {
            cout << "0\n";
            continue;
        }
        dp = vector<vector<vector<ll>>>(n + 1, vector<vector<ll>>(maxSum + 1, vector<ll>(2, -1)));

        cout << fun(0, 0, 0, v) << '\n';
    }

    return 0;
}

Information

Submit By
Type
Submission
Problem
P1093 Number of Ways (Easy version)
Contest
Brain Booster #5
Language
C++20 (G++ 13.2.0)
Submit At
2024-09-05 16:18:33
Judged At
2024-10-03 13:08:02
Judged By
Score
41
Total Time
≥1120ms
Peak Memory
≥128.016 MiB