假设我有一组正整数,每个整数都代表一个长度的杆,例如:
[26, 103, 59]
我想找到一些正整数尺寸,我将切割每根这些杆。我将受到我所做的削减总数和剩余部分总和的惩罚。
示例
例如,如果我将长度如上所述的棒切成长度为6的碎片,我会得到:
杆一(长度26):4件+剩余件2
杆2(长度103):17件+余量1
杆三(长度59):9件+余量5
处罚
4 + 17 + 9 = 30次削减
2 + 1 + 5 = 8余数
我想要一个算法作为输入:
一系列杆长
削减罚款
余额罚款
并输出最佳切割尺寸。
答案 0 :(得分:0)
这是一个蛮力的解决方案,只需尝试一下。
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner s=new Scanner(System.in);
long c=s.nextLong();
long pr=s.nextLong();
long l=s.nextLong();
long[] array=new long[(int)l];
long max=0;
for(int x=0;x<l;x++){
array[x]=s.nextLong();
if(max<array[x])
max=array[x];
}
long ans=0;
for(int p=1;p<=max;p++){
long sum=0;
long cut=0;
for(int q=0;q<l;q++){
sum+=(array[q]/p);
if(array[q]%p==0){
cut+=(array[q]/p)-1;
}else{
cut+=(array[q]/p);
}
}
long cost=sum*p*pr-cut*c;
if(cost>ans)
ans=cost;
}
System.out.println(ans);
}
}