WA on #13 求调
查看原帖
WA on #13 求调
1086504
I_AK_SDCF楼主2023/9/17 21:41
#include<bits/stdc++.h>
using namespace std;
int dp[1001][1001];
struct num{
	int t,f;
}k[1001][1001],c[1001][1001];
struct xy{
	int x,y;
}f[1001][1001];
num solve(int x){
	int s1=0,s2=0;
	if (!x)
		return {(int)1e9,(int)1e9};
	while (!(x%2)){
		++s1;
		x>>=1;
	}
	while (!(x%5)){
		++s2;
		x/=5;
	}
	return {s1,s2};
}
void print(int x,int y){
	if ((!(x-1))&&(!(y-1)))
		return;
	print(f[x][y].x,f[x][y].y);
	cout<<((f[x][y].x==x-1)?'D':'R');
	return;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n,m,y,l,l1,l2,p;
	bool b=0;
	cin>>n;
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n;++j){
			cin>>m;
			if ((!b)&&(!m)){
				b=1;
				y=j;
			}
			k[i][j]=solve(m);
		}
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n;++j){
			if ((i-1)&&(j-1)){
				l1=min(k[i][j].t+c[i-1][j].t,k[i][j].f+c[i-1][j].f);
				l2=min(k[i][j].t+c[i][j-1].t,k[i][j].f+c[i][j-1].f);
				l=min(l1,l2);
				p=min(dp[i-1][j]+l1,dp[i][j-1]+l2);
				dp[i][j]=p;
				if (p==dp[i-1][j]+l1){
					c[i][j].t=c[i-1][j].t+k[i][j].t-dp[i][j]+dp[i-1][j];
					c[i][j].f=c[i-1][j].f+k[i][j].f-dp[i][j]+dp[i-1][j];
					f[i][j]={i-1,j};
				}
				else{
					c[i][j].t=c[i][j-1].t+k[i][j].t-dp[i][j]+dp[i][j-1];
					c[i][j].f=c[i][j-1].f+k[i][j].f-dp[i][j]+dp[i][j-1];
					f[i][j]={i,j-1};
				}
			}
			else if (i-1){
				l=min(k[i][j].t+c[i-1][j].t,k[i][j].f+c[i-1][j].f);
				dp[i][j]=dp[i-1][j]+l;
				c[i][j].t=c[i-1][j].t+k[i][j].t-l;
				c[i][j].f=c[i-1][j].f+k[i][j].f-l;
				f[i][j]={i-1,j};
			}
			else if (j-1){
				l=min(k[i][j].t+c[i][j-1].t,k[i][j].f+c[i][j-1].f);
				dp[i][j]=dp[i][j-1]+l;
				c[i][j].t=c[i][j-1].t+k[i][j].t-l;
				c[i][j].f=c[i][j-1].f+k[i][j].f-l;
				f[i][j]={i,j-1};
			}
			else{
				dp[1][1]=min(k[1][1].t,k[1][1].f);
				c[1][1].t=k[1][1].t-dp[1][1];
				c[1][1].f=k[1][1].f-dp[1][1];
				f[1][1]={0,0};
			}
		}
	if ((dp[n][n]>1)&&(b)){
		cout<<"1\n";
		for (int i=1;i<y;++i)
			cout<<'R';
		for (int i=1;i<n;++i)
			cout<<'D';
		for (int i=1;i<=n-y;++i)
			cout<<'R';
		return 0;
	}
	cout<<dp[n][n]<<'\n';
	print(n,n);
	return 0;
}

看错误信息似乎正确答案是 1,但输出了 2

2023/9/17 21:41
加载中...