我坐在这里试图完成这项任务 (https://open.kattis.com/problems/walrusweights)
第一个输入包含我应该使用的印版数量(整数) 后面的内容是板(重量),它们中的每一个应该<= 1000 添加整体,尽量接近1000,但是 如果有两个这样的数字同样接近1000,(998和1002),那么选择更大的数字。
假设我有4个盘子,第一个是4,900,500,498 添加它们,以便尽可能接近1000。 498 + 500 = 998 500 + 498 + 4 = 1002 在这种情况下,请选择1002。
int sum=0;
Scanner scan = new Scanner(System.in);
int count = scan.next();
for(int i = 0; i < count; i++)
{
sum = sum + scan.next();
}
或
Scanner scan = new Scanner(System.in);
int count = scan.nextInt();
while(count > 0) {
//your logic
count--;
}
我已经尝试但不了解如何比较添加的数字的逻辑/算法,如果它们相等,请选择更大的数字。 我得到的只是我可以放入计数器和权重,它会加起来,有人可以解释如何制作算法吗?我应该阅读什么来理解这一点?
谢谢。
答案 0 :(得分:2)
这是一个动态编程问题,如果您不熟悉这种方法,这是Google的第一件事。此任务的想法是创建一个大小为2001的数组A
(请注意,任何可能的答案都小于或等于2000)。最初,A[0] = true
和所有其他索引A[i] = false
。然后,对于每个板块,您将从1000向下迭代到0,如果A[i] == true
则为A[i + currentWeight] = true
。通过这种方式,您可以计算出可以使用印版获得的总重量。最后,您会找到索引x
,以使A[x] == true
和(x - 1000)
尽可能小(如果是抽奖,则会占用最大的x
)。
答案 1 :(得分:2)