0

我会尝试更好地解释它。

所以 k = 2. In[]profits = new {1, 2, 3, 1, 6, 10}

对于第一部分,它应该是:

1,2,3

然后在 {1,2,3} 中寻找最小值,即 1。然后将其添加到下一个值 1。所以它将是 1+1。结果将是 {2,3,2}。再次寻找最小值 2 并将其添加到下一个值 6。所以它将是 2+6。结果将是 {3, 2, 8}。最后,对于 {3,2,8} 中的最小值并将其添加到下一个值 10。所以它将是 10+2。结果是 {2, 8, 10}。然后在 2 中寻找最小值。

如果你们至少可以指导我如何做到这一点?

这是测试仪:

import java.util.Arrays ;

 /**
 Presents some problems to the BillBoard class.
 */

public class BillboardTester {

    public static void main(String[] args) {
    int[] profits = new int[]{1, 2, 3, 1, 6, 10} ;

        int k = 2 ;

        System.out.println("Profits: " + Arrays.toString(profits) + "   k = " + k)  ;

        Billboard bb = new Billboard(profits, k) ;
        System.out.println("Maximum Profit = " + bb.maximumProfit()) ;
        System.out.println(bb) ;

        k = 3 ;
        profits = new int[]{7, 4, 5, 6, 1, 7, 8, 9, 2, 5} ;
        System.out.println("Profits: " + Arrays.toString(profits) + "   k = " + k)  ;
        bb = new Billboard(profits, k) ;
        System.out.println("Maximum Profit = " + bb.maximumProfit()) ;
        System.out.println(bb) ;
    }
}

这是我到目前为止的课程:

public class Billboard {
    private int maximumprofit; // The max profit 
    private int finalcost; // The final cost of removing the billboards

    public Billboard(int[]profits, int k) {
        for (int i = 0; i < profits.length; i++) {
            maximumprofit+= profits[i];
        }
    }

    public int maximumProfit() {
        return maximumprofit;
    }
}
4

1 回答 1

0

如果我正确理解您的问题,那么您就有k+1可能的总计,并且无论它是什么,您都将每个新的利润元素添加到最低的当前总利润中。所以在你的例子中,它真的

  • 1, 2, 3
  • 1+1=2, 2, 3
  • 2+6=8, 2, 3
  • 8, 2+10=12, 3

对于最终数组

  • 8, 12, 3-> 最低值实际上是3

如果这就是你的意思(你从未说过是什么k),那么这段代码就可以完成这项工作。我在那里留下了一行调试代码来帮助您检查正确性。

public class Billboard
{
    private int[] profits;
    private int k;
    public Billboard(int[]profits, int k)
    {
        this.profits = profits;
        this.k = k+1; // I changed this to k+1 because you have 3 totals with k = 2
    }
    public int maximumProfit() {
        int[] bottom = new int[k];

        for(int i = 0; i < profits.length; i++) {
            int minIndex = 0;
            int min = Integer.MAX_VALUE;
            for (int j = 0; j < k; j++) {
                if (bottom[j] < min) {
                    minIndex = j;
                    min = bottom[j];
                }
            }
            bottom[minIndex] += profits[i];
        }

        int min = Integer.MAX_VALUE;
        for(int i = 0; i < k; i++) {
            System.out.println("TestDump: #"+i+" is: " + bottom[i]);
            if (bottom[i] < min) {
                min = bottom[i];
            }
        }

        return min;
    }

    public static void main(String args[]) {
        Billboard bb = new Billboard(new int[]{1,2,3,1,6,10}, 2);
        System.out.println("Maximum profit = " + bb.maximumProfit());
    }
}

此代码输出

TestDump: #0 is: 8
TestDump: #1 is: 12
TestDump: #2 is: 3
Maximum profit = 3

要更改Billboard类在放入时输出的内容System.out.println(bb),您必须重写类的toString方法Billboard,即

@Override
public String toString() {
    return (new StringBuider(totalProfit - maxProfit)).toString();
}

假设您之前将类中的字段设置为具有正确的值。

于 2012-11-20T18:30:13.717 回答