65分求调
查看原帖
65分求调
970394
htlhtlhtl楼主2025/7/27 19:37

考场上大样例也没过,前面的数字对了,后面几个就输出-1。前面早早做完了(T1 70懂的都懂),然后这个调了1个半小时。。。调不出来只能先交了。。。然后65pts。。。

#include<bits/stdc++.h>
#define int long long 
using namespace std;
inline void cin__(int &n){
	int s=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		s=(s<<1)+(s<<3)+(ch^48);
		ch=getchar();
	}
	n=s*f;
}
inline void cout__(int n){
	if(n<0){
		putchar('-');
		n*=-1;
	}
	if(n>=10) cout__(n/10);
	putchar(n%10^48);
}
int T;
int inf=3e17;
int n,m,s,k;
int a[2005][2005];
int fl[2005][2005]; 
int fr[2005][2005];
int fu[2005][2005];
void solve(){
	cin__(n),cin__(m),cin__(s),cin__(k);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			cin__(a[i][j]);
			a[i][j]=min(a[i][j],k);
		}
		for(int j=1;j<=m;++j){
			if(i<n&&j>1&&a[i][j]>=0&&a[i][j]+a[i][j-1]>0) a[i][j]=k;
			if(i<n&&j<m&&a[i][j]>=0&&a[i][j]+a[i][j+1]>0) a[i][j]=k;
		}
	}
	for(int i=1;i<=n;++i){
		for(int j=0;j<=m+1;++j) fl[i][j]=fr[i][j]=fu[i][j]=-inf;
	}
	for(int j=1;j<=m;++j) fl[0][j]=fr[0][j]=fu[0][j]=s;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			if(fu[i-1][j]>=0) fu[i][j]=max(fu[i][j],min(fu[i-1][j]+a[i][j],k));
			if(fl[i-1][j]>=0) fu[i][j]=max(fu[i][j],min(fl[i-1][j]+a[i][j],k));
			if(fr[i-1][j]>=0) fu[i][j]=max(fu[i][j],min(fr[i-1][j]+a[i][j],k));
		}
		for(int j=1;j<=m;++j){
			if(fl[i][j-1]>=0) fl[i][j]=max(fl[i][j],min(fl[i][j-1]+a[i][j],k));
			if(fu[i][j-1]>=0) fl[i][j]=max(fl[i][j],min(fu[i][j-1]+a[i][j],k));
		}
		for(int j=m;j>=1;--j){
			if(fr[i][j+1]>=0) fr[i][j]=max(fr[i][j],min(fr[i][j+1]+a[i][j],k));
			if(fu[i][j+1]>=0) fr[i][j]=max(fr[i][j],min(fu[i][j+1]+a[i][j],k));
		}
	}
	int ans=-1;
//	for(int i=1;i<=n;++i){
//		for(int j=1;j<=m;++j){
//			cout<<fu[i][j]<<";"<<fl[i][j]<<";"<<fr[i][j]<<" ";
//		}
//		cout<<"\n";
//	}
	for(int j=1;j<=m;++j){
		ans=max(ans,fu[n][j]);
	}
	cout__(ans);
	putchar('\n');
}
signed main(){
//	freopen("journey4.in","r",stdin);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int c;
	cin__(c),cin__(T);
	while(T--) solve();
	return 0;
}
2025/7/27 19:37
加载中...