http://poj.org/problem?id=2393ios
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 7341 | Accepted: 3757 |
Descriptionide
Inputui
Outputspa
Sample Input3d
4 5 88 200 89 400 97 300 91 500
Sample Outputcode
126900
Hintorm
Sourceblog
简单DP~求最少的花费~ip
题目是说你每周能够生产牛奶,每周生产的价格为Ci,每周须要上交的牛奶量Yi,你能够选择本周生产牛奶,也可选择提早几周生产出存储在仓库中(仓库无限大,并且保质期不考虑),每一周存仓库牛奶须要花费S元,让你求出全部周的需求量上交的最少花费。get
将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 }