?
题目大意:有一个果园里有很多树,上面有很多果实,为了不然成熟的果实腐烂,必须在两天之内收集起来。给出果园有的树,以及该树上的果实个数,工人每天可以采集的上限,求出这段时间之后,能收集到的最大值
很简单,维护一个一维数组ans[],首先将数据存在结构体中,再按果实成熟的日期ai升序排序,优先将果实计入ans[ai]中,多的放入ans[ai+1]里面,如果大于上限,则记为上限大小,最后这个数组全部元素的和就是答案了。
?
#include
#include
#include
#define MAX_N 3000 using namespace std; struct fruit { int x,y; }; bool cmp(fruit a,fruit b) { return a.x
v) ans[a[i].x]=v; else ans[a[i].x]+=ans[a[i].x-1]+a[i].y-v; ans[a[i].x-1]=v; } } int Mans=0; for(int i=0;i<=maxi;i++) Mans+=ans[i]; printf(%d ,Mans); return 0; }
?