/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 2ms 4.32 MiB
#2 Accepted 121ms 4.637 MiB
#3 Accepted 101ms 4.527 MiB
#4 Accepted 133ms 2.918 MiB
#5 Accepted 129ms 10.441 MiB
#6 Accepted 189ms 77.758 MiB
#7 Accepted 228ms 77.73 MiB
#8 Accepted 176ms 77.535 MiB
#9 Accepted 158ms 77.75 MiB
#10 Accepted 158ms 77.727 MiB
#11 Accepted 153ms 77.746 MiB
#12 Accepted 146ms 77.535 MiB
#13 Accepted 155ms 77.762 MiB
#14 Accepted 148ms 77.52 MiB
#15 Accepted 160ms 77.535 MiB
#16 Accepted 149ms 77.652 MiB
#17 Accepted 50ms 28.051 MiB
#18 Accepted 26ms 7.984 MiB
#19 Accepted 34ms 6.277 MiB
#20 Accepted 158ms 77.77 MiB

Code

#ifndef COMMON_H
#define COMMON_H 1
#include <algorithm>
#include <cassert>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <deque>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_map>
#include <utility>
#include <vector>
#include <random>
using namespace std;
#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define szx(x) (int)(x).size()
using ll = long long;
using vi = vector<int>;
using pii = pair<int, int>;
constexpr int LOG2(int x)
{
    return 32 - __builtin_clz(x) - 1;
}
#endif // COMMON_H
#ifndef DEBUG_H
#define DEBUG_H 1
#ifndef CLown1331
#define debug(...) 0
#define ASSERT(...) 0
#define dbg(...) 0
#endif
#endif // DEBUG_H
#ifndef solution_h
#define solution_h 1
namespace solution
{
const int sz = 2e5 + 105;
const int mod = 1e9 + 7;
const ll INF = 1e16;
const int state_limit = 5;
int t, n;
ll ar[sz];
ll dp[sz][state_limit][state_limit];
int vis[sz][state_limit][state_limit];
int vs = 0;
ll rec(int x, int a, int b)
{
    if (x == n)
    {
        return 0;
    }
    ll &ret = dp[x][a][b];
    if (vis[x][a][b] == vs)
    {
        return ret;
    }
    ret = INF;
    vis[x][a][b] = vs;
    for (int i = 0; i < state_limit; i++)
    {
        if (i == a || i == b)
        {
            continue;
        }
        ret = min(ret, rec(x + 1, b, i) + ar[x] * i);
    }
    return ret;
}
void solve_case()
{
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%lld", &ar[i]);
    }
    reverse(ar, ar + n);
    ll ans = INF;
    vs++;
    for (int i = 0; i < state_limit; i++)
    {
        for (int j = 0; j < state_limit; j++)
        {
            if (i == j)
            {
                continue;
            }
            ans = min(ans, rec(2, i, j) + ar[0] * i + ar[1] * j);
        }
    }
    printf("%lld\n", ans);
}
void solve()
{
    vs = 0;
    scanf("%d", &t);
    while (t--)
    {
        solve_case();
    }
}
} // namespace solution
#endif // solution_h
#define _CRT_SECURE_NO_WARNINGS
int main()
{
    solution::solve();
    return 0;
}

Information

Submit By
Type
Submission
Problem
P1087 Face the monsters
Language
C++20 (G++ 13.2.0)
Submit At
2024-08-22 14:49:36
Judged At
2024-08-22 14:49:36
Judged By
Score
100
Total Time
228ms
Peak Memory
77.77 MiB