以下代码
CF说RE在了第8行。但是加上特判0后依然RE
#include <bits/stdc++.h>
#define int long long
using namespace std ;
int n , m , a[3500] , dp[3500][3500] ;
signed main(){
scanf("%lld%lld" , &n , &m );
for( int i = 1 ; i <= n ; ++ i ){
scanf("%lld" , &a[i] );
if( m != 0 ){
a[i] %= m ;
}
}
if( n > m ){
printf("YES\n");
}else{
for( int i = 1 ; i <= n ; ++ i ){
//dp[i][j]表示选到i时余数是否为j
//则选他自己是显然为j
dp[i][a[i]] = true ;
for( int j = 0 ; j < m ; ++ j ){
dp[i][j] |= dp[i-1][j] ;//如果不选,就相当于它的上一个
dp[i][j] |= dp[i-1][(j-a[i]+m)%m] ;//如果选,则余数减去m。因为怕是负的,所以要加m再mod掉
}
if( dp[i][0] == true ){
printf("YES\n");
return 0 ;
}
}
}
printf("NO\n");
return 0 ;
}
感谢大佬!好人一生平安!