求hack(50pts玄关!!
查看原帖
求hack(50pts玄关!!
1328469
glass_goldfish楼主2025/1/5 16:28
#include<bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f
using namespace std;
int t,n,m,k;
char c[701][701];
int f[701][701][5];
signed main(){
	cin>>t;
	while(t--){
		cin>>n>>m>>k;
		for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>c[i][j],f[i][j][0]=f[i][j][1]=0;
		for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			int f1=min(f[i-1][j][0],k)+f[i-1][j][1];
			int f2=min(f[i][j-1][0],k)+f[i][j-1][1];
			if(f1>f2||(f1==f2&&f[i-1][j][0]<f[i][j-1][0])){
				f[i][j][0]=f[i-1][j][0];
				f[i][j][1]=f[i-1][j][1];
				if(c[i][j]=='?')f[i][j][0]++;
				if(c[i][j]=='1')f[i][j][1]++;
				f[i][j][0]=min(f[i][j][0],k);
			}
			else{
				f[i][j][0]=f[i][j-1][0];
				f[i][j][1]=f[i][j-1][1];
				if(c[i][j]=='?')f[i][j][0]++;
				if(c[i][j]=='1')f[i][j][1]++;
				f[i][j][0]=min(f[i][j][0],k);
			}
		}
		cout<<f[n][m][0]+f[n][m][1]<<"\n";
	}
	return 0;
}

O(nm)O(nm),

2025/1/5 16:28
加载中...