WA on test 33 求助
查看原帖
WA on test 33 求助
1211899
Bobi2014楼主2024/10/17 12:33
#include<bits/stdc++.h>
using namespace std;
int n,m,p,dp[80][80],f[80][80],g[80][80][80],a[80][80],ans;
int mod(int x,int y){
	return ((x % y) + y) % y;
}
int main(){
	cin >> n >> m >> p;
	for(int i = 1;i <= n;i ++){
		for(int j = 1;j <= m;j ++){
			cin >> a[i][j];
		} 
	}
	for(int i = 1;i <= n;i ++){
		memset(g,0,sizeof(g)); 
		for(int j = 1;j <= m;j ++){
			for(int k = 1;k <= min(j,m / 2);k ++){
				for(int l = 0;l < p;l ++){
					if(k == 1 and a[i][j] % p == l){
						g[j][k][l] = a[i][j];
					}
					if(g[j - 1][k - 1][mod(l - a[i][j],p)] == 0){
						g[j][k][l] = max(g[j][k][l],g[j - 1][k][l]);
					}else{
						g[j][k][l] = max(g[j - 1][k][l],g[j - 1][k - 1][mod(l - a[i][j],p)] + a[i][j]);
					}
					f[i][l] = max(f[i][l],g[j][k][l]);
				}
			}
		}
	}
	for(int i = 1;i <= n;i ++){
		for(int j = 0;j < p;j ++){
			dp[i][j] = dp[i - 1][j];
			for(int k = 0;k < p;k ++){ 
				if(mod(f[i][k],p) == j){
					dp[i][j] = max(dp[i][j],f[i][k]);
				}
				if(dp[i - 1][mod(j - k,p)] == 0){
					continue;
				}
				dp[i][j] = max(dp[i][j],dp[i - 1][mod(j - k,p)] + f[i][k]);
			}
		}
		ans = max(ans,dp[i][0]);
	}
	cout << ans;
	return 0;
}

2024/10/17 12:33
加载中...