zoukankan      html  css  js  c++  java
  • HDU 5501

    这题的01背包的特点很容易看出来,但其实发现,这个题讲究加入时候的顺序。

    于是,用贪心排序,如代码中所示,如果A在B前面造成的分数损失更小,则排在前面。。。其实这个我也是猜的。。

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    
    int dp[1005][3005];
    
    struct Problem{
    	int a,b,c;
    }pro[1005];
    
    bool cmp(Problem a,Problem b){
    	if(a.c*b.b<b.c*a.b) return true;
    	else if(a.b*a.c+(a.c+b.c)*b.b==b.b*b.c+(a.c+b.c)*a.b){
    		if(a.b>b.b) return true;
    	}
    	return false;
    }
    
    int main(){
    	int T,n,t;
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d%d",&n,&t);
    		memset(dp,0,sizeof(dp));
    		for(int i=1;i<=n;i++){
    			scanf("%d%d%d",&pro[i].a,&pro[i].b,&pro[i].c);
    		}
    		sort(pro+1,pro+1+n,cmp);
    		for(int j=1;j<=n;j++){
    			for(int i=1;i<=t;i++){
    				dp[j][i]=max(dp[j][i],dp[j-1][i]);
    				if(i<pro[j].c) continue;
    				dp[j][i]=max(dp[j][i],dp[j-1][i-pro[j].c]+pro[j].a-pro[j].b*i);
    			}
    		}
    		int ans=dp[n][0];
    		for(int i=1;i<=t;i++){
    			ans=max(ans,dp[n][i]);
    		}
    		printf("%d
    ",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    三维形体的表面积
    访问所有点的最小时间
    链式队列
    顺序队列
    链栈
    顺序栈
    双向链表
    pyrhon 开始 基础类型
    GDI+_VB6_ARGB
    WindowsPhone自定义控件详解(一)
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4886386.html
Copyright © 2011-2022 走看看