求各位大佬指点指点,为啥ac不了?
#include<bits/stdc++.h>
using namespace std;
#define N 3005
long long a[N],f[N][N];//dp数组,dp[i][j]表示前i个数中除以k的余数为j的当前最大和
int n,k;
int main(){
cin >> n >> k;
for(int i = 1; i <= n; i ++) {cin >> a[i];}
memset(f,-0x3f,sizeof f);
long long maxv = -0x3f3f3f3f;
f[0][0] = 0;
for(int i = 1; i <= n; i ++){
for(int j = 0; j < k; j ++){
f[i][j] = max(f[i - 1][(j - a[i] + k) % k] + a[i],f[i - 1][j]);
//能ac的状态方程: f[i][(j + a[i]) % k] = max(f[i - 1][j] + a[i],f[i - 1][(j + a[i]) % k]);
}
}
for(int i = 1; i <= n; i ++) maxv = max(maxv,f[i][0]);
if(maxv > 0)cout << maxv << endl;
else cout << -1 << endl;
return 0;
}
using namespace std;
#define N 3005
long long a[N],f[N][N];//dp数组,dp[i][j]表示前i个数中除以k的余数为j的当前最大和
int n,k;
int main(){
cin >> n >> k;
for(int i = 1; i <= n; i ++) {cin >> a[i];}
memset(f,-0x3f,sizeof f);
long long maxv = -0x3f3f3f3f;
f[0][0] = 0;
for(int i = 1; i <= n; i ++){
for(int j = 0; j < k; j ++){
f[i][j] = max(f[i - 1][(j - a[i] + k) % k] + a[i],f[i - 1][j]);
//能ac的状态方程: f[i][(j + a[i]) % k] = max(f[i - 1][j] + a[i],f[i - 1][(j + a[i]) % k]);
}
}
for(int i = 1; i <= n; i ++) maxv = max(maxv,f[i][0]);
if(maxv > 0)cout << maxv << endl;
else cout << -1 << endl;
return 0;
}
全部评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
2025-12-09 23:27
商丘学院 嵌入式软件工程师
程序员花海:实习和校招简历正确格式应该是教育背景+实习+项目经历+个人评价 其中项目经历注意要体现业务 实习经历里面的业务更是要自圆其说 简历模板尽可能保持干净整洁 不要太花哨的 点赞 评论 收藏
分享
叮咚买菜工作强度 221人发布