思路:
考虑n>=m的时候:
根据鸽巢原理
N = 6 , m = 5
R0 R1 R2 R3 R4 (Ri:i= sumi%5)
假设n个数字分别为 a b c d e f
Sum1 = (a)%m
Sum2 = (a+ b)%m
Sum3 = (a+b+c)%m
Sum4 = (a+b+c+d)%m
Sum5 = (a+b+c+d+e)%m
Sum6 = (a+b+c+d+e+f)%m
根据鸽巢原理 六个和放进五个笼子里面 必然会有一个放在相同的笼子里面,如 sum5=sum1,此时b+c+d+e必然符合条件,输出必然为YES,
考虑n<m:
状态转移方程Dp[i][j]表示加上ai以后模m的结果是否存在
循环i(1~n)、j(1~m)
Dp[i][(j+ai)%m]= 1【+ai以后结果】
Dp[i][j] = 1【不加ai结果】
总结:
代码网上有,主要考虑n和m的大小关系,这样DP过程中可节约许多空间和时间。