topcoder SRM 617 DIV2 SlimeXSlimonadeTycoon
此题需要注意的两个地方是
(1)在某天生产出来的Slimonades,必须在stale_limit天内必须卖完,否则超过stale_limit内抛弃(东西都有保质期)
(2)每天生产出来的Slimonades的数量在0到morning[i]之间,而不是morning[i]
故第i天卖的东西可能来自max(0,i-stale_limit+1)~i 之间任何一天的东西,假设j在这些天数之间,
则第j天生产的东西在第i天卖的数量为min(morning[j], customer[i]),故遍历一遍即可
#include <iostream> #include <vector> #include <algorithm> using namespace std; class SlimeXSlimonadeTycoon{ public: int sell(vector<int> morning, vector<int> customers, int stale_limit){ int res = 0 ; for(int i = 0 ; i < morning.size(); ++ i){ for(int j = max(0,i-stale_limit+1); j<= i; ++ j){ if(customers[i] > 0){ int t = min(customers[i],morning[j]); res += t; customers[i] -=t; morning[j] -=t; } } } return res; } };