poj 2393 Yogurt factory(貪心)
阿新 • • 發佈:2018-10-18
pac == cst long isdigit cstring char .org 發現
傳送門
解題思路
對於第\(i\)周來說,最小的花費 \(sum=min(y[i]*(c[j]+s(i-j)))(1<=j<=i)\),所以\(sum=min(y[i]*(c[j]-s[j]+s[i])\),發現\(y[i]\)與\(s[i]\)均為定值,就是讓最小化\(c[j]-s[j]\),然後就直接維護個最小值每次更新答案即可。
代碼
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #define int long long using namespace std; const int MAXN = 10005; inline int rd(){ int x=0,f=1;char ch=getchar(); while(!isdigit(ch)) {f=ch==‘-‘?0:1;ch=getchar();} while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-‘0‘;ch=getchar();} return f?x:-x; } int n,s,ans; signed main(){ n=rd();s=rd();int mn=1e9; for(int i=1;i<=n;i++){ mn=min(mn,rd()-s*i); ans+=rd()*(s*i+mn); }cout<<ans; return 0; }
poj 2393 Yogurt factory(貪心)