題目大意:有一個果園裡有很多樹,上面有很多果實,為了不然成熟的果實腐爛,必須在兩天之內收集起來。給出果園有的樹,以及該樹上的果實個數,工人每天可以采集的上限,求出這段時間之後,能收集到的最大值
很簡單,維護一個一維數組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; }