题目链接:http://poj.org/problem?id=2393
题意:有一个奶酪工厂,给出这个工厂每天加工每个奶酪需要的价格,以及每天的需求量,另外,奶酪也可以存放在仓库里(竟然放不坏!),给出每个奶酪存放一天需要的价格,问,这些生产任务全部完成,最少的花费是多少
思路:贪心求最小值,一开始想到是要算当天的最小成本就将当天的成本与之前所有天数的成本加上对应的储存经费中取最小值,但是这时复杂度为O(n^2),当然是TLE!
其实只需要比较今天的值和昨天的值即可,因为每天都是取的 “最值”。
还有一个细节:用64位的整数,WA 了无数次,又仔细看了一下题目中的数值,改 ll 果断提交,A掉!
ac代码:
#include <iostream> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; ll N,S; struct Milk{ ll c; ll y; }milk[10005]; void solve(){ ll ans=milk[0].c*milk[0].y; ll temp=milk[0].c; for(ll i=1;i<N;i++){ // ll temp=milk[i].c; // for(ll j=0;j<i;j++) // temp=min(temp,milk[j].c+S*(i-j)); temp=min(temp+S,milk[i].c); ans+=temp*milk[i].y; } cout<<ans<<endl; } int main(void){ cin>>N>>S; for(ll i=0;i<N;i++){ cin>>milk[i].c>>milk[i].y; } solve(); return 0; }