Разложение в сумму кубов
учу рюкзак, первое задание разложение в сумму кубов, алгоритм правильный, но на 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;