RE求条
  • 板块P1874 快速求和
  • 楼主yandi_
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/24 16:35
  • 上次更新2025/7/24 20:24:46
查看原帖
RE求条
1187324
yandi_楼主2025/7/24 16:35
#include<bits/stdc++.h>
using namespace std;
string s;
int n;
int dp[40+23][100000+23];
int num[40+23][40+23];
signed main(){
	memset(dp,0x7f,sizeof(dp));
	cin>>s>>n;
	for(int i=1;i<=s.size();i++){
		for(int j=i;j<=s.size();j++){
			if(i==j)	num[i][j]=s[i-1]-'0';
			else	num[i][j]=num[i][j-1]*10+s[j-1]-'0';
		}
	}
//	cout<<num[1][1]<<endl;
//	cout<<'_'<<endl;
	dp[0][0]=-1;
	for(int i=1;i<=s.size();i++){
		for(int k=0;k<=n;k++){
			for(int j=i;j>=1 && num[j][i]<=n;j--){
				if(k>=num[j][i]){
					//cout<<i<<' '<<k<<' '<<j<<' '<<k-num[j][i]<<endl;
					dp[i][k]=min(dp[i][k],dp[j-1][k-num[j][i]]+1);
				}
			}
		}
	}
	if(dp[s.size()][n]<s.size())	cout<<dp[s.size()][n];
	else	cout<<-1;
	return 0;
}
2025/7/24 16:35
加载中...