简单 dp RE 求助 qwq
查看原帖
简单 dp RE 求助 qwq
511609
无钩七不改名楼主2023/5/21 17:59

RT.

代码:

#include<bits/stdc++.h>
using namespace std;

char s[45];
int n;
int dp[45][100005];

int main(){
    scanf(" %s%d",&s,&n);
    int len=strlen(s);
    memset(dp,0x3f,sizeof(dp));
    int x=0;
    for(int k(0);k<len;k++){
        x=x*10+(s[k]-'0');
        if(x>n)break;
        dp[k][x]=0;
    }
    for(int i(1);i<len;i++){
        for(int j(s[i]-'0');j<=n;j++){
            dp[i][j]=min(dp[i][j],dp[i-1][j-(s[i]-'0')]+1);
        }
        int x=s[i]-'0',qwq=10;
        for(int k(i-1);k>=max(0,i-5);k--){
            x+=(s[k]-'0')*qwq;
            qwq*=10;
            if(x>n)break;
            for(int j(x);j<=n;j++){
                dp[i][j]=min(dp[i][j],dp[k-1][j-x]+1);
            }
        }
    }
    if(dp[len-1][n]<=40)printf("%d",dp[len-1][n]);
    else puts("-1");
    return 0;
}

thx qwq

2023/5/21 17:59
加载中...