Problem p03128 (python)

Fixed submission:
N, M = map(int, input().split())
A = list(map(int, input().split()))
A.sort(reverse=True)
dp = [0]
cost = [0,2,5,5,4,5,6,3,7,6]
for i in range(1, N+1):
    dp.append(-(2<<10))
    for a in A:
        if i >= cost[a]: 
            dp[i] = max(dp[i - cost[a]] + 1, dp[i])
ans = ""
while N > 0:
    for e in A:
        if N >= cost[e] and dp[N] - 1 == dp[N - cost[e]]:
            if dp[N] == 1:
                if N != cost[e]: continue
            N -= cost[e]
            ans += str(e)
            break
print(ans)

Buggy submission (verdict: Runtime Error):
N, M = map(int, input().split())
A = list(map(int, input().split()))
A.sort(reverse=True)
dp = [0]
cost = [0,2,5,5,4,5,6,3,7,6]
for i in range(1, N+1):
    dp.append(-(2<<10))
    for a in A:
        if i >= cost[a]: 
            dp[i] = max(dp[i - cost[a]] + 1, dp[i])
ans = ""
while N > 0:
    for e in A:
        if dp[N] - 1 == dp[N - cost[e]]:
            if dp[N] == 1:
                if N != cost[e]: continue
            N -= cost[e]
            ans += str(e)
            break
print(ans)

Buggy submission (verdict: Runtime Error):
N, M = map(int, input().split())
A = list(map(int, input().split()))
A.sort(reverse=True)
dp = [0, -int('inf')]
cost = [0,2,5,5,4,5,6,3,7,6]
for i in range(2, N+1):
    dp.append(-int('inf'))
    for a in A:
        if i >= cost[a]: 
            dp[i] = max(dp[i - cost[a]] + 1, dp[i])
ans = ""
while N > 0:
    for e in A:
        if dp[N] - 1 == dp[N - cost[e]]:
            if dp[N] == 1:
                if N != cost[e]: continue
            N -= cost[e]
            ans += str(e)
            break
print(ans)

Buggy submission (verdict: Runtime Error):
#include <iostream>
#include <vector>
#include <string>
#include <functional>
using namespace std;
using ll = long long;

int N, M;
int dp[10001] = {};
vector<ll> A;
ll cost[] = {0,2,5,5,4,5,6,3,7,6};
string ans = "";
int tmp;

int main(void){
    cin.tie(0);
    ios::sync_with_stdio(false);

    cin >> N >> M;

    for (int m = 0; m < M; ++m) {
        cin >> tmp;
        A.push_back(tmp);  
    }
    sort(A.begin(), A.end(), greater<int>());

    for (int n = 2; n <= N; ++n) {
        for (auto e : A) {
            if (n >= cost[e])
                dp[n] = max(dp[n], dp[n - cost[e]] + 1);
        }
    }

    int remained = N;
    while (remained > 0) {
        for (auto e : A) {
            if (dp[remained - cost[e]] == dp[remained] - 1) {
                if (remained < cost[e]) continue;
                if (1 == dp[remained])
                    if (remained != cost[e]) continue;
                ans += to_string(e); 
                remained -= cost[e]; 
                break;
            }
        }
    }

    cout << ans << endl;

    return 0;
}

Buggy submission (verdict: Runtime Error):
N, M = map(int, input().split())
A = list(map(int, input().split()))
A.sort(reverse=True)
dp = [0, 0]
cost = [0,2,5,5,4,5,6,3,7,6]
for i in range(2, N+1):
    dp.append(0)
    for a in A:
        if i >= cost[a]: 
            dp[i] = max(dp[i - cost[a]] + 1, dp[i])
ans = ""
while N > 0:
    for e in A:
        if dp[N] - 1 == dp[N - cost[e]]:
            if dp[N] == 1:
                if N != cost[e]: continue
            N -= cost[e]
            ans += str(e)
            break
print(ans)

Buggy submission (verdict: Runtime Error):
N, M = map(int, input().split())
A = list(map(int, input().split()))
A.sort(reverse=True)
dp = [0, 0]
cost = [0,2,5,5,4,5,6,3,7,6]
for i in range(2, N+1):
    dp.append(0)
    for a in A:
        if i >= cost[a]: 
            dp[i] = max(dp[i - cost[a]] + 1, dp[i])
ans = ""
while N > 0:
    for e in A:
        if dp[N] - 1 == dp[N - cost[e]]:
            if dp[N] == 1:
                if N != cost[e]: continue
            N -= cost[e]
            ans += str(e)
            break
print(ans)