首页 > 代码库 > ZOJ3689 Digging(01背包)
ZOJ3689 Digging(01背包)
#include <iostream>#include <cstdio>#include<cmath>#include<algorithm>#include<cstring>#include<string>using namespace std;int dp[2][10001];struct point{ int t,s;}ps[3001];bool cmp(point A, point B){ return A.t*B.s < B.t*A.s;//比较大小的时候千万不要 计算出数值进行比较}int main(){ int n,t; int i,j; while(cin>>n>>t){ for(i=0;i<n;i++) { cin>>ps[i].t>>ps[i].s; } sort(ps,ps+n,cmp); memset(dp,0,sizeof(dp)); int ma=-1; for(i=1;i<=n;i++){ for(j=ps[i-1].t;j<=t;j++){ dp[i%2][j]=max(dp[(i-1)%2][j],dp[(i-1)%2][j-ps[i-1].t]+ps[i-1].s*(t-(j-ps[i-1].t))); if(i==n) ma=max(ma,dp[i%2][j]); } } /* for(int i = 0; i < n; i++) for(int j = t; j >= ps[i].t; j--){ int index=0; dp[index][j] = max(dp[index][j], dp[index][j-ps[i].t]+(t-j+ps[i].t)*ps[i].s); if(i==n-1) ma=max(ma,dp[index][j]); }*/ cout<<ma<<endl; } return 0;}
ZOJ3689 Digging(01背包)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。