水题,有个奶酪工厂,每天生产奶酪,现在给你一个n和一个s,n代表他要生产多少天(次)奶酪,s代表他每存一个奶酪一天要花多少钱,现在输入n个c和y,c代表今天生产奶酪要多少钱,y代表今天要向外面供多少货(不是今天生产多少)。问你成本最少要多少钱。
因为会出现这种情况比如:
s(存一天要多少钱)=2
10 200
1000 200
因为可以存奶酪,所以很明显第二天生产奶酪成本太高了,所以直接第一天生产400个,第一天卖出去200个,剩下200个先存一天,第二天再卖,由于题面不需要精确到个,每天都是按照给的数量买和生产,不会第一天331个第二天69个这样,所以直接用个标记来标记他第几天生产的时候+存到今天要多少钱最便宜
#include<iostream>
#include<algorithm>
using namespace std;
struct node{
long long price;
long long num;
};
node a[10010];
int main()
{
long long n,s;
cin>>n>>s;
for(int i=0;i<n;i++)
cin>>a[i].price>>a[i].num;
int pos=0;//第几天生产
long long price;//答案
price=a[0].num*a[0].price;//怕混淆所以先记录第一个,因为第一个一定是按自己的价格生产的
for(int i=1;i<n;i++)
{
if((i-pos)*s*a[i].num+a[pos].price*a[i].num<a[i].num*a[i].price)
price+=(i-pos)*s*a[i].num+a[pos].price*a[i].num;
else
{
price+=a[i].num*a[i].price;
pos=i;
}
}
cout<<price<<endl;
return 0;
}