【问题标题】:Algorithm which calculates the greatest sum lesser than or equal to N, using exactly one array element for M arrays?计算小于或等于 N 的最大和的算法,只使用 M 个数组的一个数组元素?
【发布时间】:2019-10-19 04:24:14
【问题描述】:

假设我们有以下一组数组,每个数组可以有不同数量的成员:

13 2 17 5

2 3 4 5

6 1 70 9

3 90 2 25

还有一个限制N = 72。有没有一种算法可以计算最接近N 的总和,记住我们必须只使用每个数组中的一个元素?

更新,我已经完成了输入,如下

#include <iostream>
#include <vector>
int main() {
std::ios::sync_with_stdio(false);
int T,B,N;
std::cin>>T>>B>>N;
std::vector<std::vector<int>> arr;
for(int i=0;i<N;i++)
{
  int temp;
   std::cin>>temp;
   std::vector<int> row;
   for(int i=0;i<temp;i++)
   {
       row.push_back(0);
   }
   arr.push_back(row);
}
for(int i=0;i<N;i++)
{
    for(int j=0;j<arr.at(i).size();j++)
    {
        int temp;
        std::cin>>temp;
        arr.at(i).at(j)=temp;
    }
}

return 0; }

【问题讨论】:

  • 到目前为止你有没有尝试过任何想法?
  • 我有理由假设你会从N 中减去每个数组中可能的最大数字,剩下的就是最接近的?起初认为这可行,但我不确定它是否会在任何情况下中断。
  • N = 72 是上限还是你能超过它?
  • 欢迎来到 SO!这个问题有点宽泛。是的,当然有一种算法可以做到这一点,但 SO 是关于帮助您解决代码中的特定问题,而不仅仅是为您提供算法。如果您发布 minimal reproducible example 显示您的尝试,您将更有可能获得具体答案。问一个与语言无关的算法问题是可以的,但它仍然应该有一个尝试(然后你可以删除语言标签)。谢谢。
  • @Rietty 我认为您的意思是“从数组和 N 中减去每个数组中的最小数字”,以减少问题。

标签: c++ arrays algorithm


【解决方案1】:

这只是一个提示,而不是真正的答案。没有代码;只有数学。尝试理解它,用代码实现它,如果你的代码不起作用,请告诉我们。

在您的示例中,您可能对 f(4, 72) 的值特别感兴趣。

【讨论】:

  • 我奇怪地感到困惑,因为任务规定必须只使用每个组中的一个元素,并且可以有 n 个组。但是,我现在发布了一个解决方案,任何优化都会有所帮助。
猜你喜欢
  • 1970-01-01
  • 2018-04-19
  • 2010-10-26
  • 1970-01-01
  • 2019-09-25
  • 2016-07-27
  • 2019-06-14
  • 1970-01-01
  • 2021-11-22
相关资源
最近更新 更多