//Jakub Trela #include <bits/stdc++.h> using namespace std; typedef long long LL; LL inf=1e18+7; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m,k; cin>>n>>k>>m; vector<vector<pair<int,int>>> przedmioty(k); vector<LL> dp(m,inf); for(int i=0;i<n;i++){ int ki,w,c; cin>>ki>>w>>c; przedmioty[ki-1].push_back({w,c}); } dp[0]=0; vector<LL> tmp; for(int i=0;i<k;i++){ tmp=dp; dp.assign(m,inf); for(int p=0;p<przedmioty[i].size();p++){ for(int j=0;j<m;j++){ dp[(j+przedmioty[i][p].first)%m]=min(dp[(j+przedmioty[i][p].first)%m],tmp[j]+(LL)przedmioty[i][p].second); } } } tmp=dp; for(int i=0;i<m;i++){ for(int j=1;j<=m;j++){ if(tmp[i]<inf/(LL)j+7)dp[(i*j)%m]=min(dp[(i*j)%m],tmp[i]*(LL)j); } } tmp=dp; for(int i=0;i<m;i++){ for(int j=0;j<m;j++){ dp[(j+i)%m]=min(dp[(j+i)%m],dp[j]+tmp[i]); } } cout<<0<<'\n'; for(int i=1;i<m;i++) if(dp[i]==inf)cout<<-1<<'\n'; else cout<<dp[i]<<'\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 | //Jakub Trela #include <bits/stdc++.h> using namespace std; typedef long long LL; LL inf=1e18+7; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m,k; cin>>n>>k>>m; vector<vector<pair<int,int>>> przedmioty(k); vector<LL> dp(m,inf); for(int i=0;i<n;i++){ int ki,w,c; cin>>ki>>w>>c; przedmioty[ki-1].push_back({w,c}); } dp[0]=0; vector<LL> tmp; for(int i=0;i<k;i++){ tmp=dp; dp.assign(m,inf); for(int p=0;p<przedmioty[i].size();p++){ for(int j=0;j<m;j++){ dp[(j+przedmioty[i][p].first)%m]=min(dp[(j+przedmioty[i][p].first)%m],tmp[j]+(LL)przedmioty[i][p].second); } } } tmp=dp; for(int i=0;i<m;i++){ for(int j=1;j<=m;j++){ if(tmp[i]<inf/(LL)j+7)dp[(i*j)%m]=min(dp[(i*j)%m],tmp[i]*(LL)j); } } tmp=dp; for(int i=0;i<m;i++){ for(int j=0;j<m;j++){ dp[(j+i)%m]=min(dp[(j+i)%m],dp[j]+tmp[i]); } } cout<<0<<'\n'; for(int i=1;i<m;i++) if(dp[i]==inf)cout<<-1<<'\n'; else cout<<dp[i]<<'\n'; return 0; } |