zoukankan      html  css  js  c++  java
  • Java实现 蓝桥杯算法提高 求最大值

    算法提高 求最大值
    时间限制:1.0s 内存限制:256.0MB
    问题描述
      给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的ai+bi的和最大。并且要求你选定的数对的ai之和非负,bi之和非负。
    输入格式
      输入的第一行为n,数对的个数
      以下n行每行两个整数 ai bi
    输出格式
      输出你选定的数对的ai+bi之和
    样例输入
    5
    -403 -625
    -847 901
    -624 -708
    -293 413
    886 709
    样例输出
    1715
    数据规模和约定
      1<=n<=100
      -1000<=ai,bi<=1000

    import java.util.Scanner;
    /*求最大值(0-1背包+负值处理)
     * dp[i]表示前i个有序整数对的最大和
     * ai看作重量,bi看作价值
     *     重量负值可采取坐标滚动,将原点向右平移最大范围即1e5个单位
     *     我们先将除“原点”外都设为-INF,然后做0-1背包
     * dp[i] = Math.max(dp[i],dp[i-x]+y)
     */
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int[] dp = new int[222222];
            for (int i = 0; i <= 200000; i++) dp[i] = -Integer.MAX_VALUE;
            dp[100000] = 0;
            int ans=0;
            int i,j;
            for(i=0;i<n;i++) {
            	int x,y;
            	x = sc.nextInt();
            	y = sc.nextInt();
            	if(x>=0) {//背包重量为非负时
            		for(j=200000;j>=x;j--) {
            			if(dp[j-x] > -Integer.MAX_VALUE) {
            				dp[j] = Math.max(dp[j], dp[j-x]+y);
            			}
            		}
            	}
            	else {//背包重量为负时
            		for(j=0;j<=200000+x;j++) {
            			if(dp[j-x]>-Integer.MAX_VALUE) {
            				dp[j] = Math.max(dp[j], dp[j-x]+y);
            			}
            		}
            	}
            }
            for(i=100000;i<=200000;i++) {
            	if(dp[i]>=0) {
            		ans = Math.max(ans, i-100000+dp[i]);
            	}
            }
            System.out.print(ans);
        }
    }
    
  • 相关阅读:
    设计模式之 原型模式
    设计模式之 策略模式
    设计模式之 单例模式
    使用IntelliJ IDEA 15和Maven创建Java Web项目(转)
    Java 内存分配全面浅析(转)
    java常量池概念 (转)
    java基本类型和包装类的区别(转)
    JAVA数据类型(转)
    SQL SERVER 2008 服务器登录名、角色、数据库用户、角色、架构的关系(转)
    视图的好处(转)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946238.html
Copyright © 2011-2022 走看看