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 }