大佬求调,就是sub1的#2超时
查看原帖
大佬求调,就是sub1的#2超时
938991
zdrtgb159753楼主2025/2/8 11:17
#include<bits/stdc++.h>
using namespace std;
const int N = 50;
long long f[N][N];
int res = -1; 
string s;
int n,len;

void dfs(int pos,int cnt,int sum){
    if (pos == len + 1) {
        if (sum == n) {
            if (res == -1 || cnt-1 < res) {
                res = cnt-1;
            }
        }
        return;
    }
    if(sum + f[pos][len] < n || sum > n) return;
    if(sum + f[pos][len] == n){
        if (res == -1 || cnt < res) {
            res = cnt;
        }
        return;
    }
    for(int j = pos; j <= len && f[pos][j] < 1e5; j++){
        dfs(j+1,cnt+1,sum+f[pos][j]);
    }
}

int main(){
    cin>>s>>n;
    for(int i = 1; i <= s.size(); i++){
        f[i][i] = s[i-1]-'0';
    }
    for(int i = 1; i <= s.size(); i++){
        for(int j = i + 1; j <= s.size(); j++){
            f[i][j] = f[i][j-1]*10+(s[j-1]-'0');
            if (f[i][j] > 1e5)
    		{
    			while (j <= s.size()) f[i][j++] = 1e8+10;
    		}
        }
    }
    len = s.size();
    dfs(1,0,0);
    printf("%d",res);
    return 0;
}
2025/2/8 11:17
加载中...