NYOJ 248 BUYING FEED (贪心)
BUYING FEED
時間限制:3000?ms ?|? 內存限制:65535?KB 難度:4 描述Farmer?John?needs to travel to town to pick up K (1 <= K <= 100)pounds of feed. Driving D miles with K pounds of feed in his truck costs?D*K?cents.
The county feed lot has N (1 <= N<= 100) stores (conveniently numbered 1..N) that sell feed. Each store is located on a segment of the X axis whose length is E (1 <= E <= 350). Store i is at?location X_i (0 < X_i < E) on the number line and can sell?John?as much as F_i (1 <= F_i <= 100) pounds of feed at a cost of C_i (1 <= C_i <= 1,000,000) cents per pound.
Amazingly, a given point on??the X axis might have more than one store.
Farmer?John??starts??at location 0 on this number line and can drive only in the positive direction, ultimately arriving at location E, with at least?K?pounds of feed. He can stop at any of the feed stores along the way and buy any amount of feed up to the the store's limit.??What is the minimum amount Farmer?John?has to pay to buy and transport the K pounds of feed? Farmer?John
knows there is a solution.?Consider a sample where Farmer?John??needs two pounds of feed from three stores (locations: 1, 3, and 4) on a number line whose range is 0..5:?????
0???1???2??3???4???5????
---------------------------------?????????
1???????1???1????????????????Available pounds of feed?????????
1???????2???2???????????????Cents per pound
It is best for?John?to buy one pound of feed from both the second and third stores. He must pay two cents to buy each pound of feed for a total cost of 4. When?John?travels from 3 to 4 he is moving 1 unit of length and he has 1 pound of feed so he must pay1*1 = 1 cents.
When?John?travels from 4 to 5 heis moving one unit and he has 2 pounds of feed so he must pay 1*2 = 2 cents. The total cost is 4+1+2 = 7 cents.
輸入
There are multi test cases ending with EOF.
Each case starts with a line containing three space-separated integers: K, E, and N
Then N lines follow :every line contains three space-separated integers: Xi Fi Ci
題意:一條數軸上有n個商店,第i個商店在Xi的位置,最多可以賣Fi磅feed,每磅Ci元。一個人從起點0開始,終點為E,當他到達E點時,至少要買K磅feed,帶著1磅feed每前進一個單位,就要額外花費1元。求最小花費是多少。
分析:這道題可以用貪心來做。先求出這個人在每個商店買1磅到達E點時的花費,把它作為這個商店的單價,那么我們在買時就不用考慮這個商店與E點的距離,只需要貪心選擇單價小的即可。
#include<stdio.h> #include<algorithm> using namespace std; struct store {int pos; //商店位置int f; //最多賣的數量int c; //處理前的單價int s; //處理后的單價 }a[105];bool comp(store a1, store a2) {return a1.s < a2.s; //優先選擇單價小的 }int main() {int k, L, n, i, j, sum, T;scanf("%d",&T);while(T--){scanf("%d%d%d",&k,&L,&n);for(i = 0; i < n; i++){scanf("%d%d%d",&a[i].pos, &a[i].f, &a[i].c);a[i].s = L - a[i].pos + a[i].c; //把這個商店到終點的距離和原來的單價一起作為新的單價}sort(a, a+n,comp);int sum = 0, cnt = 0;for(i = 0; i < n; i++){if(cnt < k){if(cnt + a[i].f <= k){sum += a[i].f * a[i].s;cnt += a[i].f;if(cnt == k)break;}else{sum += (k - cnt) * a[i].s;break;}}}printf("%d\n",sum);}return 0; }
總結
以上是生活随笔為你收集整理的NYOJ 248 BUYING FEED (贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NYOJ 711 最舒适的路线(并查集)
- 下一篇: 【5折秒杀】戴尔轻薄商务本只卖2899元