数据范围有误
查看原帖
数据范围有误
749863
lhf18363180886楼主2024/11/10 10:52

反馈

@离散小波变换°

题目《说明/提示》中说:

1<=x<=300

但是测试点1 2 3 6中均出现x=0的情况

下附1<=x<=300能过但是x=0过不了的代码,即初始时 若(1,1)是?,则一定会消耗次数变为1,(因为(1,1)一定会走到):

#include <bits/stdc++.h>
using namespace std;

int t;
int n,m,x;
char c[505][505];
int dp[505][505][305];

int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>m>>x;
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				for(int k=0;k<=x;k++)
				{
					dp[i][j][k]=0;
				}
			}
		}
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++)
			{
				cin>>c[i][j];
			}
		}
		if(c[1][1]=='?')//就是这里
		{
			c[1][1]='1';
			x--;
		}
		for(int k=0;k<=x;k++)
		{
			for(int i=1;i<=n;i++)
			{
				for(int j=1;j<=m;j++)
				{
					if(c[i][j]=='?'&&k!=0)
					{
						dp[i][j][k]=max(max(dp[i-1][j][k-1]+1,dp[i][j-1][k-1]+1),max(dp[i-1][j][k],dp[i][j-1][k]));
					}
					else if(c[i][j]=='?'&&k==0)
					{
						dp[i][j][k]=max(dp[i-1][j][k],dp[i][j-1][k]);
					}
					else
					{
						dp[i][j][k]=(int)(c[i][j]-'0')+max(dp[i-1][j][k],dp[i][j-1][k]);
					}
				}
			}
		}
		cout<<dp[n][m][x]<<endl;
	}
	return 0;
}
2024/11/10 10:52
加载中...