动态规划0分全MLE
查看原帖
动态规划0分全MLE
520847
HOILAI_CEO楼主2023/10/9 16:25
只是想知道DP可不可以做这道题

但是很显然,评测记录:https://www.luogu.com.cn/record/128408019

#include<bits/stdc++.h>
using namespace std;
const int maxn_nm=1e6;
const int maxn_c=1e4;
int n,m,q;
int A[maxn_nm],B[maxn_nm];
long long C[maxn_c][maxn_c];
long long dp[maxn_c][maxn_c];
int main()
{
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){cin>>A[i];}
	for(int i=1;i<=m;i++){cin>>B[i];}
	for(int i=1;i<=n;i++)
	{
		for(int j=i;j<=m;j++)
		{
			C[i][j]=A[i]*B[j];
		}
	}
	
	for(int i=1;i<=q;i++)
	{
		int l1,r1,l2,r2;
		cin>>l1>>r1>>l2>>r2;
		memset(dp, 0, sizeof(dp));
		dp[l1][r1] = C[l1][r1];// l1 == r1  
		for (int i = l1 + 1; i <= r1; i++)
		{
			dp[i][r1] = max(dp[i][r1], C[i][r1] - C[i - 1][r1 - 1]);
		}
		for (int i = l1; i < r1; i++) 
		{
			dp[i][r1] = max(dp[i][r1], dp[i + 1][r1]);
		}
		for (int i = l2; i <= r2; i++) 
		{
			dp[l1][i] = max(dp[l1][i], C[l1][i] - C[l1][i - 1]);
		}
		for (int i = l1 + 1; i <= r1; i++)
		{
			dp[i][l2] = max(dp[i][l2], C[i][l2] - C[i - 1][l2 - 1]);
		}
		for (int i = l1; i < r1; i++) 
		{
			dp[i][l2] = max(dp[i][l2], dp[i + 1][l2]);
		}
		int ans = max(dp[l1][r1], dp[l2][r2]);
		cout << ans << endl;
	}
	return 0;
}

2023/10/9 16:25
加载中...