BUYING FEED
Problem F: F BUYING FEED
Description
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 pay 1*1 = 1 cents.
When John travels from 4 to 5 he is 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.
Input
Line 1: Three space-separated integers: K, E, and N Lines 2…N+1: Line i+1 contains three space-separated integers: Xi Fi Ci
Output
A single integer that is the minimum cost for FJ to buy and transport the feed
Sample Input
3 1 2
4 1 2
1 1 1
Sample Output
#include<bits/stdc++.h>
using namespace std;
const int MAX = 1010;
struct node{
int xi;
int per;
int w;
}stu[MAX];
int n, e, k;
bool cmp(node a, node b) {//让每个点都买单位数量到终点的价格作为单价排序
return n-a.xi+a.per < n-b.xi+b.per;
}
int main() {
while(~scanf("%d%d%d", &k, &e, &n)) {
for(int i = 0; i < n; i++) {
scanf("%d%d%d", &stu[i].xi, &stu[i].w, &stu[i].per);
}
sort(stu, stu+n, cmp);
int sum = 0;//贪心 放包问题
for(int i = 0; i < n; i++) {
if(k >= stu[i].w) {
k -= stu[i].w;
sum += (e-stu[i].xi)*stu[i].w+stu[i].w*stu[i].per;
} else {
sum += (e-stu[i].xi)*k+k*stu[i].per;
k = 0;
}
if(k == 0)
break;
}
printf("%d\n", sum);
}
}
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int INF = 0x3f3f3f3f;
const int MAX = 200;
struct node
{
int w;
int per;
};
int k,e,n;
int dp[400][105];// dp[x][w] 其中x为当前坐标,w为已购买数量
vector<node>edge[400];
int main()
{
while(~scanf("%d %d %d",&k,&e,&n))
{
fill(dp[0], dp[0]+MAX*MAX, INF);
for(int i=0;i<n;i++)
{
int xi;
node temp;
scanf("%d %d %d",&xi,&temp.w,&temp.per);
edge[xi].push_back(temp);//一点可能多商店
}
dp[0][0]=0;//边界 //求每种状态
for(int i=1;i<=e;i++)
{
for(int l=k;l>=0;l--)
{
dp[i][l]=dp[i-1][l];//先继承一下,再去更新
for(int j=0;j<edge[i-1].size();j++)//前面那个点的所有商店,跑一遍
{
int Per=edge[i-1][j].per;//当前单价
int W=edge[i-1][j].w;//当前数量
for(int p=0;p<=W;p++)//购买l和w 以内的 物品 的花费
if(l>=p)
dp[i][l]=min(dp[i][l],dp[i-1][l-p]+p*Per+(e-i+1)*p);
//当前状态的最小花费,要么不买, 要么在前一个的状态中找一个能达到该状态,并且花费小的
}
}
}
printf("%d\n",dp[e][k]);//到达5点,购买k的花费就是答案。
}
return 0;
}
BUYING FEED的更多相关文章
- ACM BUYING FEED
BUYING FEED 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 Farmer John needs to travel to town to pick up ...
- 2020: [Usaco2010 Jan]Buying Feed, II
2020: [Usaco2010 Jan]Buying Feed, II Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 220 Solved: 162[ ...
- 洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II
洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II https://www.luogu.org/problemnew/show/P2616 题目描述 Farmer ...
- USACO Buying Feed, II
洛谷 P2616 [USACO10JAN]购买饲料II Buying Feed, II 洛谷传送门 JDOJ 2671: USACO 2010 Jan Silver 2.Buying Feed, II ...
- 【P2616】 【USACO10JAN】购买饲料II Buying Feed, II
P2616 [USACO10JAN]购买饲料II Buying Feed, II 题目描述 Farmer John needs to travel to town to pick up K (1 &l ...
- 【BZOJ】2020: [Usaco2010 Jan]Buying Feed, II (dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=2020 和背包差不多 同样滚动数组 f[j]表示当前位置j份食物的最小价值 f[j]=min(f[j- ...
- Buying Feed, 2010 Nov (单调队列优化DP)
约翰开车回家,又准备顺路买点饲料了(咦?为啥要说"又"字?)回家的路程一共有 E 公里,这一路上会经过 K 家商店,第 i 家店里有 Fi 吨饲料,售价为每吨 Ci 元.约翰打算买 ...
- [河南省ACM省赛-第三届] BUYING FEED (nyoj 248)
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> us ...
- 【BZOJ2059】Buying Feed 购买饲料
题面 约翰开车来到镇上,他要带V吨饲料回家.如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D* X^2元.约翰可以从N家商店购买饲料,所有商店都在一个坐标轴上,第i家店的位置是Xi, ...
随机推荐
- FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题--转
FEC(Forward Error Correction)前向纠错 UDP\RTP 中使用用于改善无线等网络丢包等问题 算法暂不介绍. 思路:FEC ENCODE 增加冗余包,当无线等网络丢包之后,接 ...
- 洛谷 P1767 家族_NOI导刊2010普及(10)
题目描述 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏.现在给你岛上的 ...
- css--offsetParent
offsetParent属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),并且是已进行过CSS定位的容器元素. 如果这个容器元素未进行CSS定位, ...
- 洛谷 1351 联合权值——树形dp
题目:https://www.luogu.org/problemnew/show/P1351 对拍了一下,才发现自己漏掉了那种拐弯的情况. #include<iostream> #incl ...
- C# 表达式树(Expression)
c#中有Expression,即表达式. 通过Expression可以动态构造代码,并编译执行. 比如: 1. 创建参数表达式 :ParameterExpression numParam = Ex ...
- commons-configuration读取配置文件
关键工具类: import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.con ...
- 使用jpa报No query defined for that name错误
今天使用jpa创建本地查询时出现Java.lang.IllegalArgumentException: No query defined for that name..... 一个很sb的问题,调用e ...
- ipcs、ipcrm命令
进程间通信概述进程间通信有如下的目的:1.数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M之间:2.共享数据,多个进程想要操作共享数据,一个进程对数据的修改,其他进程应该 ...
- [xdoj1029]求解某个数的最高位和最低位
解题关键: 1.最高位求法 long long int x=n^m; 式子两边同时取lg lg(x)=m*lg(n): x=10^(m*lg(n)): 10的整数次方的最高位一定是1,所以x的最高位取 ...
- mongodb的备份还原
一:备份数据库 G:\Program Files\MongoDB\Server\3.0\bin>mongodump -d mydb -o g:/data/back mongodump -h IP ...