#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
const long long INF=1e18;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, k, m; cin>>n>>k>>m;
vector<vector<pair<int, int>>>zel(k+1);
for (int i=0; i<n; i++)
{
int col, waga, cen; cin>>col>>waga>>cen;
zel[col].push_back({waga, cen});
}
vector<long long>dp(m, INF); dp[0]=0;
for (int i=1; i<=k; i++)
{
vector<long long>pom(m, INF);
for (auto j : zel[i])
{
for (int l=0; l<m; l++)
{
pom[l]=min(pom[l], dp[l-j.f+(l-j.f<0)*m]+j.s);
}
}
swap(dp, pom);
}
//~ for (int i=0; i<m; i++) cout<<i<<" "<<dp[i]<<endl;
//~ return 0;
vector<long long>ans(m, INF); ans[0]=0;
for (int i=1; i<m; i++)
{
for (int j=__gcd(i, m); j>=1; j--)
{
int l=j, pre=(m+j-i)%m;
do
{
ans[l]=min(ans[l], ans[pre]+dp[i]);
pre=l;
l+=i; l-=(l>=m)*m;
}while (l != j);
l=j, pre=(m+j-i)%m;
do
{
ans[l]=min(ans[l], ans[pre]+dp[i]);
pre=l;
l+=i; l-=(l>=m)*m;
}while (l != j);
}
}
for (auto i : ans) cout<<(i==INF? -1 : i)<<"\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 | #include <bits/stdc++.h> #define f first #define s second using namespace std; const long long INF=1e18; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, k, m; cin>>n>>k>>m; vector<vector<pair<int, int>>>zel(k+1); for (int i=0; i<n; i++) { int col, waga, cen; cin>>col>>waga>>cen; zel[col].push_back({waga, cen}); } vector<long long>dp(m, INF); dp[0]=0; for (int i=1; i<=k; i++) { vector<long long>pom(m, INF); for (auto j : zel[i]) { for (int l=0; l<m; l++) { pom[l]=min(pom[l], dp[l-j.f+(l-j.f<0)*m]+j.s); } } swap(dp, pom); } //~ for (int i=0; i<m; i++) cout<<i<<" "<<dp[i]<<endl; //~ return 0; vector<long long>ans(m, INF); ans[0]=0; for (int i=1; i<m; i++) { for (int j=__gcd(i, m); j>=1; j--) { int l=j, pre=(m+j-i)%m; do { ans[l]=min(ans[l], ans[pre]+dp[i]); pre=l; l+=i; l-=(l>=m)*m; }while (l != j); l=j, pre=(m+j-i)%m; do { ans[l]=min(ans[l], ans[pre]+dp[i]); pre=l; l+=i; l-=(l>=m)*m; }while (l != j); } } for (auto i : ans) cout<<(i==INF? -1 : i)<<"\n"; } |
English