#include<bits/stdc++.h>
using namespace std;
using lld = long long;
const lld INF = 1e18;
struct Jelly {
int color;
int weight;
int cost;
};
bool cmp_by_color(const Jelly& a, const Jelly& b) {
return a.color < b.color;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n,k,m;
cin >> n >> k >> m;
vector<Jelly> t(n);
for(auto& i : t)
cin >> i.color >> i.weight >> i.cost;
sort(t.begin(), t.end(), cmp_by_color);
vector<lld> p;
{
vector<vector<lld>> dp(2, vector<lld>(m, INF));
int it = 0;
dp[1][0] = 0;
int last = 0;
for(auto& i : t) {
if(i.color != last) {
it = 1-it;
fill(dp[1-it].begin(), dp[1-it].end(), INF);
if(i.color != last+1) break;
last = i.color;
}
for(int j=0;j<m;j++)
dp[1-it][(j+i.weight) % m] = min(dp[1-it][(j+i.weight) % m], dp[it][j] + i.cost);
}
p = dp[1-it];
}
vector<lld> result(m, INF);
result[0] = 0;
{
vector<bool> vis(m, false);
for(int it=0;it<m;it++) {
int v = -1;
for(int i=0;i<m;i++)
if(!vis[i] && (v == -1 || result[i] < result[v]))
v = i;
vis[v] = true;
for(int i=0;i<m;i++)
result[(v+i) % m] = min(result[(v+i) % m], result[v] + p[i]);
}
}
for(auto i : result)
cout << (i != INF ? i : -1) << "\n";
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include<bits/stdc++.h> using namespace std; using lld = long long; const lld INF = 1e18; struct Jelly { int color; int weight; int cost; }; bool cmp_by_color(const Jelly& a, const Jelly& b) { return a.color < b.color; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n,k,m; cin >> n >> k >> m; vector<Jelly> t(n); for(auto& i : t) cin >> i.color >> i.weight >> i.cost; sort(t.begin(), t.end(), cmp_by_color); vector<lld> p; { vector<vector<lld>> dp(2, vector<lld>(m, INF)); int it = 0; dp[1][0] = 0; int last = 0; for(auto& i : t) { if(i.color != last) { it = 1-it; fill(dp[1-it].begin(), dp[1-it].end(), INF); if(i.color != last+1) break; last = i.color; } for(int j=0;j<m;j++) dp[1-it][(j+i.weight) % m] = min(dp[1-it][(j+i.weight) % m], dp[it][j] + i.cost); } p = dp[1-it]; } vector<lld> result(m, INF); result[0] = 0; { vector<bool> vis(m, false); for(int it=0;it<m;it++) { int v = -1; for(int i=0;i<m;i++) if(!vis[i] && (v == -1 || result[i] < result[v])) v = i; vis[v] = true; for(int i=0;i<m;i++) result[(v+i) % m] = min(result[(v+i) % m], result[v] + p[i]); } } for(auto i : result) cout << (i != INF ? i : -1) << "\n"; return 0; } |
English