小米9.5笔试
第二题,dp,d[i][j]表示前 i 个数的和能够凑成模完 x 为 j 的最小删除次数,那么最终答案加上最少的加1操作次数即可
const int N = 1e3 + 5;
int n,x;
int a[N];
int d[N][N];
void solve(){
cin >> n >> x;
for(int i = 1; i <= n; i++) cin >> a[i], a[i] %= x;
for(int i = 0; i <= n; i++){
for(int j = 0; j <= x; j++) d[i][j] = 1e9;
}
d[0][0] = 0;
for(int i = 1; i <= n; i++){
for(int j = x - 1; j >= 0; j--){
int res = (j - a[i] + x) % x;
int h = min(d[i - 1][j] + 1, d[i - 1][res]);
d[i][j] = min(d[i][j], h);
}
}
int ans = 1e9;
for(int i = 0; i <= x - 1; i++){
if(i == 0){
ans = min(ans, d[n][0]);
continue;
}
ans = min(ans, d[n][i] + x - i);
}
cout << ans << endl;
}