Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
麻烦哪位牛人帮我看看这个程序,不知是思路出了问题还是细节使我没通过(附程序)//尽可能把最大利润的物品先加入,利用数组标识物品的最大利润,从而不用对p值进行排序了 #include <iostream> #include <queue> using namespace std; priority_queue<int> v[10001];//v[i]表示利润p为i时插入到这个优先队列的d值 bool flag[10001];//标识可用的日期 int main() { int n,i; while(scanf("%d",&n)!=EOF){ int max_p=0;//用来记录整个的物品的最大值 for(i=0;i<n;++i){ int p,d; scanf("%d %d",&p,&d); if(p>max_p) max_p=p; v[p].push(d); } memset(flag,0,sizeof(flag)); int sum=0; for(int t=max_p;t>0;--t){ if(!v[t].empty()){ while(!v[t].empty()){ int d=v[t].top(); v[t].pop(); for(i=d;i>0;--i){//尽量将物品往靠近deadline的日期放 if(!flag[i]){ sum+=t;flag[i]=1;break; } } if(i==0)//如果一趟下来都没日期可用了,那么v[t]这个队列里的其余物品也没日期可用了,就可跳出这个while循环 break; } } } cout<<sum<<endl; } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator