线性动规求调
查看原帖
线性动规求调
858608
BreadCakeCheese楼主2024/7/24 18:50
#include<bits/stdc++.h>
using namespace std;
const int N=50,M=1e5+5;
int n,l,a[N],num[N][N],dp[N][M];
int main(){
	string s;
	cin>>s>>n;
	l=s.size();
	for(int i=0;i<=l;i++){
		for(int j=0;j<=n;j++) dp[i][j]=INT_MAX;
	}
	dp[0][0]=-1;
	for(int i=0;i<l;i++) a[i+1]=s[i]-'0';
	for(int i=1;i<=l;i++){
		int x=0;
		for(int j=i;j>=max(0,i-5);j--){
			x=x+a[j]*pow(10,i-j);
			num[j][i]=x;
		}
	}
	for(int i=1;i<=l;i++){
		for(int k=0;k<=n;k++){
			for(int j=i-1;j>=0&&num[j+1][i]<=n;j--){
				if(dp[j][k]!=INT_MAX&&k+num[j+1][i]<=n){
					dp[i][k+num[j+1][i]]=min(dp[i][k+num[j+1][i]],dp[j][k]+1);
				}
			}
		}
	}
	if(dp[l][n]==INT_MAX) cout<<"-1";
	else cout<<dp[l][n];
	return 0;
}

WA on Subtask1 #2#3

求调

2024/7/24 18:50
加载中...