有N个玩具,它们的权重由数组W = {w 1 ,w 2 ,...,w N }表示
每个玩具花费1个单位,如果购买了重量为w i 的玩具,那么我们可以获得所有其他重量在[w i]内的玩具,wi + 4](包括两者)免费。
W = {1, 2, 3, 17, 10}
如果第一个玩具重量为1的玩具购买1个单位,那么第二个和第三个玩具将自由 ,因为它们的重量在[1,5]之内。最后两个玩具必须单独购买。
for(int i = 0; i < n - 1; i++) {
if(a[i + 1] - a[i] <= 4) {
ans += 1;
}
}
ans = n - ans;
cout << ans;
我得到了错误的答案。我的方法出了什么问题?
答案 0 :(得分:0)
[这将是一个评论,但我没有足够的声誉]
很难回答这个问题,因为它并不清楚你期望得到什么输出。但是,看起来您需要对原始数组a
进行排序才能使这种方法起作用,但从您给出的示例来看,情况并非如此。
话虽如此,我可能误解了你正在尝试做的事情。
答案 1 :(得分:0)
您举了一个免费获得第二个和第三个玩具的示例,因此您检查了W[bought_toy + 1]
和W[bought_toy + 2]
。
但是,在你的代码中你只检查W[bought_toy + 1]
,所以你永远不会知道你也免费获得第三个玩具。