#include <bits/stdc++.h> #define N 7001 using namespace std; int n,k,m,color,mi,ci; vector<pair<int,long long>> zelki[N]; long long dp[N],dpc[N*2],d[N*2]; bool vis[N]; const long long INF = 1e18; int main() { scanf("%d%d%d",&n,&k,&m); for(int i=0;i<n;i++) { scanf("%d%d%d",&color,&mi,&ci); zelki[color].push_back({mi, ci}); } for(int i=1;i<m;i++) dp[i]=INF; for(int color=1;color<=k;color++) { for(int i=0;i<m*2;i++) dpc[i]=INF; for(auto z: zelki[color]) { int w=z.first; long long c=z.second; for(int i=0;i<m;i++) dpc[i+w]=min(dpc[i+w], dp[i]+c); } for(int i=0;i<m;i++) dp[i]=min(dpc[i], dpc[i+m]); } for(int i=1;i<N;i++) d[i]=INF; for(int iter=0;iter<m;iter++) { int best=-1; for(int i=0;i<m;i++) { if(!vis[i]&&(best==-1||d[i]<d[best])) best=i; } vis[best]=true; for(int i=0;i<m;i++) { int s=best+i; if(s>=m) s-=m; d[s]=min(d[s],d[best] + dp[i]); } } for(int i=0;i<m;i++) { if(d[i]==INF) printf("-1\n"); else printf("%lld\n", d[i]); } 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 | #include <bits/stdc++.h> #define N 7001 using namespace std; int n,k,m,color,mi,ci; vector<pair<int,long long>> zelki[N]; long long dp[N],dpc[N*2],d[N*2]; bool vis[N]; const long long INF = 1e18; int main() { scanf("%d%d%d",&n,&k,&m); for(int i=0;i<n;i++) { scanf("%d%d%d",&color,&mi,&ci); zelki[color].push_back({mi, ci}); } for(int i=1;i<m;i++) dp[i]=INF; for(int color=1;color<=k;color++) { for(int i=0;i<m*2;i++) dpc[i]=INF; for(auto z: zelki[color]) { int w=z.first; long long c=z.second; for(int i=0;i<m;i++) dpc[i+w]=min(dpc[i+w], dp[i]+c); } for(int i=0;i<m;i++) dp[i]=min(dpc[i], dpc[i+m]); } for(int i=1;i<N;i++) d[i]=INF; for(int iter=0;iter<m;iter++) { int best=-1; for(int i=0;i<m;i++) { if(!vis[i]&&(best==-1||d[i]<d[best])) best=i; } vis[best]=true; for(int i=0;i<m;i++) { int s=best+i; if(s>=m) s-=m; d[s]=min(d[s],d[best] + dp[i]); } } for(int i=0;i<m;i++) { if(d[i]==INF) printf("-1\n"); else printf("%lld\n", d[i]); } return 0; } |