标签:分享 限制 使用 mit lag ram att color unit
For example, consider the products Prod={a,b,c,d} with (pa,da)=(50,2), (pb,db)=(10,1), (pc,dc)=(20,2), and (pd,dd)=(30,1). The possible selling schedules are listed in table 1. For instance, the schedule Sell={d,a} shows that the selling of product d starts at time 0 and ends at time 1, while the selling of product a starts at time 1 and ends at time 2. Each of these products is sold by its deadline. Sell is the optimal schedule and its profit is 80.
Write a program that reads sets of products from an input text file and computes the profit of an optimal selling schedule for each set of products.
4 50 2 10 1 20 2 30 1 7 20 1 2 1 10 3 100 2 8 2 5 20 50 10
80 185
1 /** 2 题目大意: 3 求:能够得到的最大利润 4 数据说明: 5 n ==> 表示有n种商品 6 px dx ==> 只要商品在dx (包括dx)之前买完就可以获得px的利润 7 一天只可以买一种商品 8 9 步骤(贪心): 10 ①、将px降序排列 11 ②、每件商品从最大期限的时间的开始查找直到找到可以使用的时间 (或者到第一天) 12 ②(1)如果是找到满足条件的时间就将该件商品的px加入能够得到的总利润中(然后跳出循环) 13 ②(2)如果是找不到就不将该商品的px加入到总利润中 14 **/
核心代码:
1 sort (P, P+n, cmp); 2 3 for (int i = 0; i < n; ++ i) 4 { 5 for (int j = P[i].dx; j >= 1; -- j) 6 { 7 if (!book [i]) 8 { 9 book [i] = 1; 10 cnt += P[i].px; 11 break; 12 } 13 } 14 }
C/C++代码实现(AC):
1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<algorithm> 5 #include<iostream> 6 7 using namespace std; 8 9 int n, cnt, flag[100*105]; 10 11 struct node 12 { 13 int v, k; 14 }P[100*105]; 15 16 bool cmp(node a, node b) 17 { 18 return a.v > b.v; 19 } 20 21 int main(){ 22 while(~scanf("%d", &n)) 23 { 24 cnt = 0; 25 memset(flag, 0, sizeof(flag)); 26 for(int i = 0; i < n; ++ i) 27 scanf("%d%d", &P[i].v, &P[i].k); 28 sort(P, P + n, cmp); 29 for(int i = 0; i < n; ++ i) 30 { 31 for(int j = P[i].k; j >= 1; -- j) 32 { 33 if (!flag[j]) 34 { 35 flag[j] = 1; 36 cnt += P[i].v; 37 break; 38 } 39 } 40 } 41 printf("%d\n", cnt); 42 } 43 return 0; 44 }
nyoj 208 + poj 1456 Supermarket (贪心)
标签:分享 限制 使用 mit lag ram att color unit
原文地址:https://www.cnblogs.com/GetcharZp/p/8993303.html