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 |
储存状态量的数组开大一点,我开400wa,40000a了代码如下(高度和海拔看混了~~)#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; const int maxn=40001; const int INF=(1<<30); int d[maxn]; struct Node { int h,a,c; bool operator < (const Node& rhs) const {//重载操作符,按最高海拔排序 return a< rhs.a; } }node[maxn]; void ZeroOnepack(int sum, int c)//01背包 { for(int j=sum;j>=c;j--) d[j]=max(d[j],d[j-c]+c); } int k,max_a; int main() { cin>>k; max_a=0; for(int i=1;i<=k;i++) { cin>>node[i].h>>node[i].a>>node[i].c; max_a=max(max_a,node[i].a); } sort(node+1,node+k+1); d[0]=0; for(int i=1;i<=max_a;i++)//多重背包 d[i]=-INF; for(int i=1;i<=k;i++) { int k=1; while(k<node[i].c) { ZeroOnepack(node[i].a,k*node[i].h); node[i].c-=k; k=k*2; } ZeroOnepack(node[i].a,node[i].c*node[i].h); } for(int i=max_a;i>=0;i--) if(d[i]>=0) {cout<<d[i]<<endl;break;} } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator