题目描述
给定长度为n的整数序列和数字m,要求在相邻的两个数字之间插入加('+')或减('-')操作符(不能动原序列顺序),使得算术结果是m的整数倍。
例如序列为:3, -3, -9, 0,m=3,那么3+(-3)+(-9)=-9是3的整数倍。
输入格式
输入 n m 。
1≤n≤10^5, 2≤m≤100
第二行有n个整数, 每个整数的绝对值不大于10^5.
输出格式
输出,如果可以插入操作符使得算术结果是m的整数倍,输出’Right’,否则输出’Wrong’。
样例输入1:
4 3
3 -3 -9 0
样例输出1:
Right
样例输入2:
4 2
9 -3 22 4
样例输出2:
Right
我的50分代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N], dp[N][110];
int main() {
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
a[i] = a[i] % m;
}
dp[1][a[1]%m] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j < m; j++) {
if (dp[i][j] == 1) {
dp[i+1][(j + a[i+1]) % m] = 1;
dp[i+1][(j - a[i+1] + m) % m] = 1;
}
}
}
if (dp[n][0] == 1) {
printf("Right\n");
} else {
printf("Wrong\n");
}
return 0;
}
到底哪里错了?