110/01 實作題第二題 流量
這一題的題序有點複雜,看了幾次之後才看懂。但重點是在考試的時候沒有想到要怎麼合併流量,所以只用了一維陣列計算最小值,因此只有拿到50分…
這是完整版的程式碼,主要是透過創建一個陣列r[i][j],表示從城市i出發到城市j的總流量,再利用陣列r計算費用。
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
| #include <bits/stdc++.h> #define ios ios::sync_with_stdio(0),cin.tie(0); #define int long long using namespace std; int N,M,K,s[50][50],r[50][50];
signed main(){ ios; cin>>N>>M>>K; for(int i=0;i<N;i++){ for(int j=0;j<M;j++){ cin>>s[i][j]; } } int ans = 1e8; for(int k=0;k<K;k++){ memset(r, 0, sizeof(r)); for(int q=0;q<N;q++){ int p; cin>>p; for(int j=0;j<M;j++)r[p][j]+=s[q][j]; } int sum = 0; for(int q=0;q<M;q++){ for(int j=0;j<M;j++){ if(q==j)sum+=r[q][j]; else if(r[q][j]<=1000)sum+=3*r[q][j]; else sum+=(r[q][j]-1000)*2+3000; } } ans = min(ans,sum); } cout<<ans<<endl; }
|