标签:
http://poj.org/problem?id=1260
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 8474 | Accepted: 4236 |
Description
Input
Output
Sample Input
2
2
100 1
100 2
3
1 10
1 11
100 12
Sample Output
330
1344
题意:题意比较难以解释,大概就是要用最小的花费去买完所有珍珠,珍珠可以分块购买(每次购买的价格是最高级的珍珠的价格)或者单类购买,每一次购买都要加上10个此次购买的最高级珍珠的价格(最高级的珍珠是输入时越靠后的,并不是最贵的,千万注意)
1 #include <cstdio> 2 #include <algorithm> 3 #include <cstring> 4 #include <cmath> 5 #include <iostream> 6 using namespace std; 7 #define MAXN 1010 8 9 struct node 10 { 11 int a,p; 12 }c[MAXN]; 13 int dp[MAXN],sum[MAXN]; 14 15 bool cmp(node a,node b) 16 { 17 return a.p<b.p; 18 } 19 20 int main() 21 { 22 int t; 23 scanf("%d",&t); 24 while(t--){ 25 int n; 26 scanf("%d",&n); 27 memset(dp,0,sizeof(dp)); 28 memset(sum,0,sizeof(sum)); 29 for(int i=1;i<=n;i++){ 30 scanf("%d%d",&c[i].a,&c[i].p); 31 sum[i]=sum[i-1]+c[i].a; 32 } 33 // sort(c+1,c+n+1,cmp); 34 int res,tmp,ans=0; 35 for(int i=1;i<=n;i++){ 36 tmp=100000000; 37 for(int j=1;j<=i;j++){ 38 tmp=min( dp[j-1]+(sum[i]-sum[j-1]+10)*c[i].p,tmp ); 39 } 40 dp[i]=tmp; 41 } 42 printf("%d\n",dp[n]); 43 } 44 return 0; 45 }
标签:
原文地址:http://www.cnblogs.com/fightfordream/p/5558734.html