酒厂选址(codevs 1507)
題目描述?Description
Abstinence(戒酒)島的居民們酷愛一種無酒精啤酒。以前這種啤酒都是從波蘭進口,但今年居民們想建一個自己的啤酒廠。島上所有的城市都坐落在海邊,并且由一條沿海岸線的環島高速路連接。酒廠的投資者收集了關于啤酒需求量的信息,即每天各城市消費的啤酒桶數。另外還知道相鄰城市之間的距離。每桶啤酒每英里的運費是1元。日運費是將所需要的啤酒從酒廠運到所有城市所必需的運費之和。日運費的多少和酒廠的選址有關。投資者想找到一個合適的城市來修建酒廠,以使得日運費最小。
請設計一個程序:從文件bre.in?讀入城市的數目、相鄰兩城市間的距離以及每個城市消費的啤酒桶數,計算最小的日運費,將結果寫到輸出文件bre.out中。
輸入描述?Input Description
第一行是一個整數n(5?<=?n?<=?10000)?,表示城市的數目。?城市沿高速路編號,使得相鄰的城市的編號也相鄰(城市1和n也被認為是相鄰)。?以下的n行,每行有兩個非負整數。第I+1行的數?zi、di分別是城市I每日的啤酒消費量(桶)和從城市I沿高速路到下一個城市的距離(英里)。高速路的總長不會超過65535?英里。每座城市的日消費量不會超過255桶。
輸出描述?Output Description
一個整數,表示所需的最小日運費(元)。
樣例輸入?Sample Input
6
1?2
2?3
1?2
5?2
1?10
2?3
樣例輸出?Sample Output
41
/*第一次做INF開小了,數據也沒用long long,得了45分。 */ #include<cstdio> #include<iostream> #define M 10010 #define LL long long #define INF 9223372036854775807LL using namespace std; int dis[M],a[M],sum,n; LL mon[M]; int main() {scanf("%d",&n);for(int i=1;i<=n;i++){int x;scanf("%d%d",&a[i],&x);if(i!=n)dis[i+1]+=(x+dis[i]);sum+=x;}for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++){int p=dis[j]-dis[i];mon[i]+=(LL)(min(p,sum-p)*a[j]);mon[j]+=(LL)(min(p,sum-p)*a[i]);}LL ans=INF;for(int i=1;i<=n;i++)if(mon[i]<ans)ans=mon[i];printf("%lld",ans);return 0; } View Code?
轉載于:https://www.cnblogs.com/harden/p/5655878.html
總結
以上是生活随笔為你收集整理的酒厂选址(codevs 1507)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《21天学通C语言(第7版)》一2.5
- 下一篇: java生成pdf加密_java使用iT