警示后人!!!!
查看原帖
警示后人!!!!
1379742
Xiaohaoyu1020明天见_xj楼主2024/7/13 20:14

虽然本题数据到达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];
}
2024/7/13 20:14
加载中...