虽然本题数据到达1e5但是再算的过程中可能会涉及到long long的数字
不开long long见祖宗,谁知long long藏此处啊
挂掉的代码如下:
#include<iostream>
#include<cstring>
using namespace std;
const int S = 40,J = 1e5;
int dp[S][J];
int main(){
//freopen("t1.in","r",stdin);
//cout<<'0';
int n;
string s;
cin>>s;
cin>>n;
memset(dp,0x3f,sizeof(dp));
//f[i][j]以i为结尾,得出答案为j方案最少要用到的
for(int i = 1;i<=s.size();i++){
if(stoi(s.substr(0,i))<=n){
dp[i-1][stoi(s.substr(0,i))] = 0;
}else{
break;
}
}
for(int i = 1;i<s.size();i++){
int d = s[i] - '0',w = 1;//这里没开long long!!!!!!
for(int j = i-1;j>=0 && d<=n;j--){
for(int k = n;k>=d;k--){
dp[i][k] = min(dp[i][k],dp[j][k-d]+1);
}
w*=10;
d = d+w*(s[j]-'0');
}
}
if(dp[s.size()-1][n] >= 0x3f3f3f3f)cout<<-1;
else cout<<dp[s.size()-1][n];
}