rt,下题代码 WA 测试点几乎比答案大一倍。

姑且当弱化版,1≤n≤5000。
# include <bits/stdc++.h>
# define int long long
# define rint register int
# define ME ;
# define AK 0
# define SX2022 return
inline int read();
inline void write(int x);
inline void writesp(int x);
inline void wrietln(int x);
//---------------------------------
using namespace std;
const int N = 1e4 + 10;
int n ,m ,ans ,a[N] ,f[N];
inline void fre(){
freopen("beautiful.in" ,"r" ,stdin);
freopen("beautiful.out" ,"w" ,stdout);
}
signed main(){
n = read() ,m = read();
for(rint i = 1 ;i <= n; i ++)
a[i] = read() ,a[i] %= m;
f[1] = 1;
ans = 1;
for(rint i = 2 ; i <= n ;i ++){
f[i] = 1;
for(rint j = 1; j < i ;j ++)
if((a[i] + a[j]) % m == 0) f[i] = max(f[i] ,f[j] + 1);
ans = max(ans ,f[i]);
}
printf("%lld\n" ,n - ans);
SX2022 AK ME
}
inline int read(){
int s = 0 ,w = 0;
char c = getchar();
while(!isdigit(c)){
w |= (c == '-');
c = getchar();
} while(isdigit(c)){
s = (s << 1ll) + (s << 3ll) + (c ^ 48);
c = getchar();
} return w ? -s : s;
} inline void write(int x){
if(x < 0) putchar('-') ,x = -x;
if(x >= 10) write(x / 10);
putchar (x % 10 | 48);
} inline void writesp(int x){
write(x) ,putchar(' ');
} inline void writeln(int x){
write(x) ,putchar('\n');
}
请问是转移有问题还是思路有问题?
fi 表示强制以第 i 个数为序列末尾能够保存的最多数。