首页 > 代码库 > ACM1881 01背包问题应用
ACM1881 01背包问题应用
01背包问题动态规划应用
acm1881毕业bg
将必须离开的时间限制看作背包容量,先将他们由小到大排序,然后在排完序的数组中对每个实例都从它的时间限制开始(背包容量)到它的延长时间进行遍历;
1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 struct BG 6 { 7 int h,t,l; 8 friend bool operator<(BG a,BG b) 9 {10 return a.l<b.l;11 }12 };13 BG *bg;14 int main()15 {16 int n,m;17 int value[3500];18 while(cin>>n&&n>=0)19 {20 m=0;21 if(n==0)22 {23 cout<<0<<endl;24 continue;25 }26 bg=new BG[n];27 memset(value,0,sizeof(value));28 for(int i=0;i<n;i++)29 {30 cin>>bg[i].h>>bg[i].t>>bg[i].l;31 m=(bg[i].l>m)?bg[i].l:m;32 }33 sort(bg,bg+n);34 for(int i=0;i<n;i++)35 {36 for(int j=bg[i].l;j>=bg[i].t;j--)37 {38 value[j]=max(value[j],value[j-bg[i].t]+bg[i].h);39 }40 }41 int ans=0;42 for(int i=0;i<=m;i++)43 {44 if(value[i]>ans)ans=value[i];45 }46 cout<<ans<<endl;47 }48 return 0;49 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。