Разложение в сумму кубов

учу рюкзак, первое задание разложение в сумму кубов, алгоритм правильный, но на 1300 и более ничего не выводит, может переполнение но я все перепробовал, помогите пожалуйста


#include <iostream>
#include <vector>

using namespace std;

int main() {
    int n; cin >> n;
    vector<int> a(n + 1);
    vector<vector<int>> arr(n + 1, vector<int>(n + 1, 0));
    for (int i = 1; i < n + 1; ++i) {
        a[i] = i * i * i;
    }
    for (int i = 1; i < n + 1; ++i) {
        for (int j = 1; j < n + 1; ++j) {
            arr[i][j] = arr[i][j - 1];
            if (i >= a[j]) {
                if (arr[i][j] == 0 || arr[i][j] > arr[i - a[j]][j] + 1) {
                    arr[i][j] = arr[i - a[j]][j] + 1;
                }
            }
        }
    }
    cout << arr[n][n];
}

Ответы (1 шт):

Автор решения: MBo

Как вы заметили, граничное значение 1300, куб которого не входит в диапазон int: 1300^3 > max int (2^31)

Используйте внутри векторов 64-разрядный long long,а чтобы произведение не переполнялось при i:int, можно компилятору подcказать:

a[i] = (long long)i * i * i;
→ Ссылка