贪心算法的两个简单解决问题

贪心算法的两个简单解决问题,第1张

1.【活动安排问题】设有n个活动的集合E={1,2,...n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和fi,且sii。如果选择了活动i,则它在半开时间区间[si,fi)内占用资源。若区间[si,fi)和[sj,fj)不相交,则称活动i和活动j是相容的。活动安排问题就是要在所给的活动集合中选出最大的相容活动子集和。

其实主要关注的点就是前一个活动的结束时间大不大于后一个的开始时间,不大于就把后一个活动加入进去,活动1是直接加入的。

 

package shiyan.si;

import java.util.Scanner;
public class Huodong {
//    贪心算法1
public static int  greedselect(int[] a, int[] b, int n){
    int i,j=0,cnt=1;//活动1直接加入
    System.out.println("活动1进行("+a[0]+","+b[0]+")");
    for(i=1;ib[j]){   //如果当前的开始时间大于上一个的结束时间,则加入到活动中
            System.out.println("活动"+(i+1)+"进行("+a[i]+","+b[i]+")");
            cnt++;
            j=i;
        }
    }
    return cnt;
}

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.print("输入活动的数目:");
        int max=scanner.nextInt();
        int k,cont;
        int a[]=new int[max];
        int b[]=new int[max];

        for(k=0;k

2.【背包问题】列有一堆物品S=(a1,a2…an),每一个物品ai都有对应的重量wi和价值vi。现在有一个背包,容量为C。现在要选择物品装入背包,所选物品重量不能超过背包容量,并使得背包里物品价值最大。与0-1背包不同的是,可以对物品进行分割,即可以只选取物品ai的一部分装入背包。

考虑的越多,越复杂,目前就这样简单实现吧。

package shiyan.si;

import java.util.Scanner;

public class T01bag {
    private static int ai;
    private static int C;
    private static int t;
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入物品数量");
        ai=scanner.nextInt();
        int v[]=new int[ai];
        int w[]=new int[ai];
        System.out.println("请输入背包的容积");
        C=scanner.nextInt();
        for (int i = 0; i < ai; i++) {
            System.out.println("请输入对应物品" + (i + 1) + "的体积和价值");
            v[i]=scanner.nextInt();
            w[i]=scanner.nextInt();
        }
        double sum=max(ai,C,v,w);
        System.out.println("背包的总价值为:" + sum);
    }
    public static double max(int ai,int c,int v[],int w[]){
        double s[]=new double[ai];
        double sum=0;
        for (int i = 0; i < ai; i++) {
            s[i] = costeffective(v[i], w[i]);
        }
        for (int j=0;j

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/723536.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)