标签:
http://poj.org/problem?id=2393
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 7341 | Accepted: 3757 |
Description
Input
Output
Sample Input
4 5 88 200 89 400 97 300 91 500
Sample Output
126900
Hint
Source
简单DP~求最少的花费~
题目是说你每周可以生产牛奶,每周生产的价格为Ci,每周需要上交的牛奶量Yi,你可以选择本周生产牛奶,也可选择提前几周生产出存储在仓库中(仓库无限大,而且保质期不考虑),每一周存仓库牛奶需要花费S元,让你求出所有周的需求量上交的最少花费。
将S转换到花费中~
AC代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 const int maxn=10011; 6 int n,s; 7 int y[maxn],c[maxn]; 8 int main() 9 { 10 while(scanf("%d%d",&n,&s)!=EOF) 11 { 12 for(int i=0;i<n;i++) 13 scanf("%d%d",&c[i],&y[i]); 14 long long ans=0; 15 for(int i=1;i<n;i++) 16 c[i]=min(c[i-1]+s,c[i]); 17 for(int i=0;i<n;i++) 18 ans+=c[i]*y[i]; 19 printf("%lld\n",ans); 20 } 21 return 0; 22 }
AC代码:
1 #include<cstdio> 2 3 using namespace std; 4 int a[10005],b[10005]; 5 6 int main() { 7 int n,s; 8 while(~scanf("%d %d",&n,&s)) { 9 for(int i = 0;i < n;i++) { 10 scanf("%d %d",&a[i],&b[i]); 11 } 12 13 __int64 res = a[0] * b[0]; 14 for(int i = 1;i < n;i++) { 15 int mi = 10000000,pos = -1; 16 for(int j = 0;j < i;j++) { 17 if(mi > s * (i - j) && (a[i] - a[j] > s * (i - j)) ) { 18 mi = s * (i - j); 19 pos = j; 20 } 21 } 22 if(pos != -1) 23 res += a[pos] * b[i] + mi * b[i]; 24 else 25 res += a[i] * b[i]; 26 } 27 printf("%I64d\n",res); 28 } 29 return 0; 30 }
标签:
原文地址:http://www.cnblogs.com/jeff-wgc/p/4483304.html