#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <math.h>
using namespace std;
struct sum
{
int num,time;
};
string a;
int n,len,f[42],org[42][42];
vector<sum>dp[42];
void make()
{
for(int i=1;i<=len;i++)
{
for(int j=i+1;j<=i+42;j++)
{
if(j>len||org[i][j-i-1]>=1e5)
{
break;
}
org[i][j-i]=org[i][j-i-1]*10+f[j];
}
}
}
int main()
{
cin>>a;
cin>>n;
len=a.length();
for(int i=0;i<len;i++)
{
if(a[i])
f[i+1]=a[i]-'0';
}
dp[1].push_back({f[1],0});
make();
for(int i=2;i<=len;i++)
{
if(i<=5)
{
dp[i].push_back({int(f[1]*pow(10,(i-1))+org[1][i-1]),0});
}
for(int j=i-1;j>0;j--)
{
for(auto y:dp[j])
{
if(y.num+org[j][i-j]>n)continue;
dp[i].push_back({y.num+org[j][i-j],y.time+1});
}
}
}
int ans=0x3f3f3f3f;
for(auto y:dp[len])
{
if(y.num==n)
{
ans=min(ans,y.time);
}
}
if(ans==0x3f3f3f3f)
{
cout<<-1;
}
else
{
cout<<ans;
}
}
代码思路没问题,就是后面三个点超内存,能不能提供一些减小内存的方法