小米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;
}

全部评论
tql,根本没想到dp
2 回复 分享
发布于 2024-09-05 17:42 黑龙江
转移方程好复杂
点赞 回复 分享
发布于 2024-09-05 17:51 广东
大佬,你应该国银起步把
点赞 回复 分享
发布于 2024-09-05 17:54 湖北
牛逼plus 根本想不到这种定义
点赞 回复 分享
发布于 2024-09-05 17:57 四川

相关推荐

01-15 13:52
已编辑
河南大学 Java
六年要多久:标准头像,不吃香菜😂
点赞 评论 收藏
分享
评论
12
15
分享

创作者周榜

更多
牛客网
牛客企业服务