萌新刚学OI 1ms,求调
  • 板块灌水区
  • 楼主baibaieee
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/6/9 15:33
  • 上次更新2024/6/9 18:52:06
查看原帖
萌新刚学OI 1ms,求调
536362
baibaieee楼主2024/6/9 15:33

题目: P8801

#include<bits/stdc++.h>
using namespace std;
const int MAXN=25,MAXA=105;
long long dp[MAXN][MAXA][MAXA],n,a,b;
int num[25],num2[25],len;
void getnum(long long x){
	if(x==0)len=1;
	while(x){
		num2[++len]=x%10;
		x/=10;
	}
	for(int i=1;i<=len;i++){
		num[i]=num2[len-i+1];
	}
}
long long getdp(){
	getnum(n);
	for(int i=1;i<=len;i++){
		for(int j=num[i];j<=9;j++){
			int usea=j-num[i],useb=num[i]-j;
			if(useb<0)useb+=10;
			if(usea<=a){
				for(int k=0;k<=a-usea;k++){
					for(int m=0;m<=b;m++){
						dp[i][k][m]=max(dp[i][k][m],dp[i-1][k+usea][m]*10+j);
					}
				}
			}
			if(useb<=b){
				for(int k=0;k<=a;k++){
					for(int m=0;m<=b-useb;m++){
						dp[i][k][m]=max(dp[i][k][m],dp[i-1][k][m+useb]*10+j);
					}
				}
			}
		}
	}
}
int main(){
	cin>>n>>a>>b;
	getdp();	
	long long ans=0;
	for(int i=0;i<=a;i++){
		for(int j=0;j<=b;j++)ans=max(ans,dp[len][i][j]);
	}
	cout<<ans;
  	return 0;
}
2024/6/9 15:33
加载中...