Задача на дп, выводит ошибку при выполнении программы, хотя на компиляторе выдает правильный результат

#include <bits/stdc++.h>
using namespace std;
long long n;
vector <string> ans;
vector <long long> vec;
void dp()
{
	for(int i=4;i<=n;i++)
	{
		long long prev=vec[i-1];
		if(i%2==0)
		{
			prev=min(vec[i/2],prev);
		}
		if(i%3==0)
		{
			prev=min(vec[i/3],prev);
		}
		vec[i]=prev;
		if(i%2==0 && vec[i]==vec[i/2])
		{
			ans[i]=ans[i/2]+"2";
		}
		else if(i%3==0 && vec[i]==vec[i/3])
		{
			ans[i]=ans[i/3]+"3";
		}
		else
		{
			ans[i]=ans[i-1]+"1";
		}
		vec[i]++;
	}
}
int main()
{
	cin>>n;
	if(n<=1)
	{
		return 0;
	}
	vec=vector <long long> (n+10);
	ans=vector <string> (n+10,"");
	ans[0]="";
	ans[1]="";
	ans[2]="2";
	ans[3]="3";
	vec[0]=0;
	vec[1]=0;
	vec[2]=1;
	vec[3]=1;
	dp();
	cout<<ans[n];
	return 0;
}

12 тестов из 19 проходит, по остальным ошибка при выполнении программы, вот ссылка на задачу Динамическое программирование

1 лайк

Может ли быть дело в переполнении вектора? 10^6 чисел в вектор должны с лихвой уместится?

почему ты просто не создашь массивы?

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

можно второй массив экономнее хранить

1 лайк

Спасибо, восстановил ответ эффективнее

1 лайк