111111
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
vector<int> A(n);
for (int i = 0; i < n; ++i) cin >> A[i];
int INF = 1000;
vector<vector<int>> dp(n + 1, vector<int>(x, INF));
dp[0][0] = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < x; ++j) {
//删除A[i]
//dp[i][j] 前i个元素刚好满足取模x余数为j的操作数
dp[i + 1][j] = min(dp[i + 1][j], dp[i][j] + 1);
//保留A[i] (1、加入原值不动 2、执行+1操作)
//1、加入原值A[i]后,余数不变, 操作数等同于dp[i][j]。
//不删除元素且不修改其值,则可能加入后刚好满足余数要求,因此选取dp[i][j]满足条件的即可//选择此前刚好满足余数j要求的i
int new_mod = (j + A[i]) % x;
dp[i + 1][new_mod] = min(dp[i + 1][new_mod], dp[i][j]);
//2、执行+1操作
for (int k = 0; k < x; ++k) {
int new_mod2 = (j + A[i] + k) % x;
dp[i + 1][new_mod2] = min(dp[i + 1][new_mod2], dp[i][j] + k);
}
}
}
for (int i = 0; i <= n; i++) {
for (int j = 0; j < x; j++) {
cout << dp[i][j] <<',';
}
cout << endl;
}
cout << dp[n][0] << endl;
return 0;
}
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, x;
cin >> n >> x;
vector<int> A(n);
for (int i = 0; i < n; ++i) cin >> A[i];
int INF = 1000;
vector<vector<int>> dp(n + 1, vector<int>(x, INF));
dp[0][0] = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < x; ++j) {
//删除A[i]
//dp[i][j] 前i个元素刚好满足取模x余数为j的操作数
dp[i + 1][j] = min(dp[i + 1][j], dp[i][j] + 1);
//保留A[i] (1、加入原值不动 2、执行+1操作)
//1、加入原值A[i]后,余数不变, 操作数等同于dp[i][j]。
//不删除元素且不修改其值,则可能加入后刚好满足余数要求,因此选取dp[i][j]满足条件的即可//选择此前刚好满足余数j要求的i
int new_mod = (j + A[i]) % x;
dp[i + 1][new_mod] = min(dp[i + 1][new_mod], dp[i][j]);
//2、执行+1操作
for (int k = 0; k < x; ++k) {
int new_mod2 = (j + A[i] + k) % x;
dp[i + 1][new_mod2] = min(dp[i + 1][new_mod2], dp[i][j] + k);
}
}
}
for (int i = 0; i <= n; i++) {
for (int j = 0; j < x; j++) {
cout << dp[i][j] <<',';
}
cout << endl;
}
cout << dp[n][0] << endl;
return 0;
}
全部评论
相关推荐
点赞 评论 收藏
分享
04-27 14:30
辽宁大学 模拟IC设计 点赞 评论 收藏
分享
04-05 14:18
北京师范大学 产品经理 最近暑期日常都全军覆没拜托大家帮我看看是不是有什么硬伤应该怎么改进另外我感觉产品赛道卷得很要不要换产品运营 会不会好一些如果换的话 我现在是不是得速速找一段产品运营日常为秋招做准备
点赞 评论 收藏
分享
04-25 16:44
武汉纺织大学 品牌专员 点赞 评论 收藏
分享