#include <bits/stdc++.h>
using namespace std;
pair<int, pair< int, long long> > T[7100];
const int dl = 7100;
long long dp[dl+10];
long long dpp[dl+10];
long long dp2[dl+10];
int nr[dl+10];
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, k, m;
cin>>n>>k>>m;
for(int i = 0;i < n ;i++){
cin>>T[i].first>>T[i].second.first>>T[i].second.second;
}
sort(T, T+n);
int ost =0;
int pop = T[0].first;
for(int i=1;i<=dl;i++){
dpp[i]=LLONG_MAX;
dp[i] = LLONG_MAX;
dp2[i] = LLONG_MAX;
nr[i] = -1;
}
nr[0] = -1;
dp[0] = LLONG_MAX;
for(int i=0; i<n;i++){
if(pop != T[i].first){
for(int j=0; j<m; j++){
dpp[j] = dp[j];
dp[j] = LLONG_MAX;
}
}
if(pop + 1 < T[i].first){
break;
}
for(int j = m-1; j>=0; j--){
if(dpp[j] < LLONG_MAX){
dp[(j + T[i].second.first)%m]=min(dpp[j] + T[i].second.second, dp[(j + T[i].second.first)%m]);
}
}
pop=T[i].first;
}
if(pop != k or T[0].first != 1){
for(int j=0;j<m;j++){
dp[j] = LLONG_MAX;
}
}
for(int j=0; j <m; j++){
if(dp[j]==LLONG_MAX){
continue;
}
// cout<<"w"<<j<<"\n";
for(int jj = 0; jj<m; jj++){
int poz = jj;
while(dp2[(poz+j)%m] > dp2[poz]+dp[j] && dp2[poz]!=LLONG_MAX){
dp2[(poz+j)%m] = min(dp2[(poz+j)%m], dp2[poz]+dp[j]);
//cout<<"z"<<" "<<(poz+j)%m<<" "<<dp2[(poz+j)%m]<<"\n";
nr[(poz+j)%m] = j;
poz = (poz+j)%m;
}
}
}
for(int jj=0; jj<m;jj++){
if(dp2[jj]==LLONG_MAX){
cout<<-1<<"\n";
}
else{
cout<<dp2[jj]<<"\n";
}
}
}
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 78 | #include <bits/stdc++.h> using namespace std; pair<int, pair< int, long long> > T[7100]; const int dl = 7100; long long dp[dl+10]; long long dpp[dl+10]; long long dp2[dl+10]; int nr[dl+10]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, k, m; cin>>n>>k>>m; for(int i = 0;i < n ;i++){ cin>>T[i].first>>T[i].second.first>>T[i].second.second; } sort(T, T+n); int ost =0; int pop = T[0].first; for(int i=1;i<=dl;i++){ dpp[i]=LLONG_MAX; dp[i] = LLONG_MAX; dp2[i] = LLONG_MAX; nr[i] = -1; } nr[0] = -1; dp[0] = LLONG_MAX; for(int i=0; i<n;i++){ if(pop != T[i].first){ for(int j=0; j<m; j++){ dpp[j] = dp[j]; dp[j] = LLONG_MAX; } } if(pop + 1 < T[i].first){ break; } for(int j = m-1; j>=0; j--){ if(dpp[j] < LLONG_MAX){ dp[(j + T[i].second.first)%m]=min(dpp[j] + T[i].second.second, dp[(j + T[i].second.first)%m]); } } pop=T[i].first; } if(pop != k or T[0].first != 1){ for(int j=0;j<m;j++){ dp[j] = LLONG_MAX; } } for(int j=0; j <m; j++){ if(dp[j]==LLONG_MAX){ continue; } // cout<<"w"<<j<<"\n"; for(int jj = 0; jj<m; jj++){ int poz = jj; while(dp2[(poz+j)%m] > dp2[poz]+dp[j] && dp2[poz]!=LLONG_MAX){ dp2[(poz+j)%m] = min(dp2[(poz+j)%m], dp2[poz]+dp[j]); //cout<<"z"<<" "<<(poz+j)%m<<" "<<dp2[(poz+j)%m]<<"\n"; nr[(poz+j)%m] = j; poz = (poz+j)%m; } } } for(int jj=0; jj<m;jj++){ if(dp2[jj]==LLONG_MAX){ cout<<-1<<"\n"; } else{ cout<<dp2[jj]<<"\n"; } } } |
English