过了但不知道为啥
查看原帖
过了但不知道为啥
682313
djyqjy楼主2024/7/28 16:40
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=25,AB=110;
int n,a,b;
string s;
int dp[N][AB][AB];
void work()
{
	for(int i=1;i<s.length();i++)
	{
		for(int j=0;j<=a;j++)
		{
			for(int k=0;k<=b;k++)
			{
				if(i==1)
				{
					if(s[i]-'0'+1<=k) dp[i][j][k]=9;
					dp[i][j][k]=max(dp[i][j][k],min(9ll,s[i]-'0'+j));
					continue;
				}
				dp[i][j][k]=dp[i-1][j][k]*10+s[i]-'0';
				//把下面这两行注释掉就过了 
//				if(j) dp[i][j][k]=max(dp[i][j][k],dp[i][j-1][k]);
//				if(k) dp[i][j][k]=max(dp[i][j][k],dp[i][j][k-1]);
				if(s[i]-'0'+1<=b) dp[i][j][k]=max(dp[i][j][k],dp[i-1][j][k-s[i]+'0'-1]*10ll+9ll);
				for(int aa=0;s[i]+aa-'0'<=9&&aa<=j;aa++)
				    dp[i][j][k]=max(dp[i][j][k],dp[i-1][j-aa][k]*10ll+s[i]-'0'+aa);
			}
		}
	}
	return;
}
signed main()
{
	cin>>s;
	s=' '+s;
	for(int i=1;i<s.length();i++)
	    n=n*10+s[i]-'0';
	scanf("%lld%lld",&a,&b);
	work();
	printf("%lld",dp[s.length()-1][a][b]);
	return 0;
}

把25、26行注释掉就过了,不注释就WA on #9

2024/7/28 16:40
加载中...