题意:月饼店卖月饼有一些预定月饼店在2000年一月一号0点开张k小时。每小时做出来的月饼价格不一样,月饼能保存若干小时每小时花费都告诉你。让你求月饼店完成所有订单的最小成本。
思路:这道题本身思路不难,我们知道月饼保存费用和每天做月饼的费用,我们就能算出来每天做月饼的成本,然后在这个数组上RMQ就可以了。就是日起处理比较麻烦,具体还是见代码吧。
代码如下:
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 11 using namespace std; 12 13 typedef pair pii; 14 typedef long long ll; 15 16 const int INF = 0x3f3f3f3f; 17 const int LEN = 100010; 18 ll que[2*LEN], ad[2*LEN], tb[LEN]; 19 int day[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 20 struct CS { 21 char mon[5]; 22 int y, d, h, num; 23 }; 24 CS con[5000+10]; 25 26 27 bool jy(int y) { 28 return ((y%4==0 && y%100!=0) || y%400==0); 29 } 30 31 int changedata(char mon[], int d, int y, int h) { 32 int ret = 0; 33 if(y < 2000) return INF; 34 for(int i=2000; i m) { continue;}118 ans += (rmq((locd-save+1>=1?locd-save+1:1), (locd+1<=m?locd+1:m))-ad[locd])*con[i].num;119 }120 printf("%I64d\n", ans);121 }122 return 0;123 }