小编Deg*_*taf的帖子

动态编程 - 硬币更改决策

我正在审查算法课程中的一些旧笔记,动态编程问题对我来说似乎有点棘手.我有一个问题,我们有无限量的硬币,有一些面额x1,x2,... xn我们想要改变一些价值X.我们正在设计一个动态程序来决定是否可以改变X是否制造(不是最小化硬币数量,或返回哪些硬币,只是真或假).

我已经做了一些关于这个问题的思考,我可以看到这样做的递归方法,就像它...

MakeChange(X, x[1..n this is the coins])
    for (int i = 1; i < n; i++)
    {
        if ( (X - x[i] ==0) || MakeChange(X - x[i]) )
            return true;
    }
    return false;
Run Code Online (Sandbox Code Playgroud)

转换这个动态程序对我来说并不容易.我怎么能接近这个?

algorithm computer-science dynamic-programming

14
推荐指数
1
解决办法
2万
查看次数

如何使用VBA执行shell命令?

我想使用Visual Basic for Applications执行如下所示的shell命令.

C:\Temp\gc.exe 1
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

windows shell vba

12
推荐指数
1
解决办法
5万
查看次数

高效的算法来获得两个大数之间的素数

我是C#的初学者,我正在尝试编写一个应用程序来获取用户输入的两个数字之间的素数.问题是:在大数(有效数字在1到1000000000范围内)时,获取素数需要很长时间,并且根据我正在解决的问题,整个操作必须在很短的时间间隔内进行.这是问题链接以获得更多解释: SPOJ-Prime

这是我的代码中负责获取素数的部分:

  public void GetPrime()
    {            
        int L1 = int.Parse(Limits[0]);
        int L2 = int.Parse(Limits[1]);

        if (L1 == 1)
        {
            L1++;
        }

        for (int i = L1; i <= L2; i++)
        {
            for (int k = L1; k <= L2; k++)
            {
                if (i == k)
                {
                    continue;
                }
                else if (i % k == 0)
                {
                    flag = false;
                    break;
                }
                else
                {
                    flag = true;
                }
            }

            if (flag)
            {
                Console.WriteLine(i);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

有没有更快的算法?提前致谢.

c# algorithm primes

12
推荐指数
2
解决办法
2万
查看次数

确定硬币组合的算法

我最近面临一个编程算法的提示,我不知道该怎么做.我以前从来没有真正写过算法,所以我对此有点新意.

问题是写一个程序,以确定收银员根据硬币值和硬币数量作为变化回馈所有可能的硬币组合.例如,可能有一个有4个硬币的货币:2美分,6美分,10美分和15美分硬币.这有多少组合等于50美分?

我正在使用的语言是C++,虽然这并不重要.

编辑:这是一个更具体的编程问题,但我如何分析C++中的字符串来获取硬币值?它们是在文本文档中给出的

4 2 6 10 15 50 
Run Code Online (Sandbox Code Playgroud)

(在这种情况下,数字对应于我给出的例子)

c++ algorithm combinations combinatorics

11
推荐指数
3
解决办法
1万
查看次数

硬币改变算法

假设我有一组面额为a1,a2,... ak的硬币.

已知其中一个等于1.

我想使用最小数量的硬币对所有整数1到n进行更改.

任何关于算法的想法.

eg. 1, 3, 4 coin denominations
n = 11
optimal selection is 3, 0, 2 in the order of coin denominations.

n = 12
optimal selection is 2, 2, 1.
Run Code Online (Sandbox Code Playgroud)

注意:不是作业只是修改这个问题

algorithm

10
推荐指数
1
解决办法
2万
查看次数

Scala中硬币更改的StackOverflowError?

我正在为Scala中的Coin(更改)问题编写递归函数.

我的实现打破了StackOverflowError,我无法弄清楚它为什么会发生.

Exception in thread "main" java.lang.StackOverflowError
    at scala.collection.immutable.$colon$colon.tail(List.scala:358)
    at scala.collection.immutable.$colon$colon.tail(List.scala:356)
    at recfun.Main$.recurs$1(Main.scala:58) // repeat this line over and over
Run Code Online (Sandbox Code Playgroud)

这是我的电话:

  println(countChange(20, List(1,5,10)))
Run Code Online (Sandbox Code Playgroud)

这是我的定义:

def countChange(money: Int, coins: List[Int]): Int =  {

  def recurs(money: Int, coins: List[Int], combos: Int): Int = 
  {    
      if (coins.isEmpty)
          combos
      else if (money==0)
          combos + 1
      else
          recurs(money,coins.tail,combos+1) + recurs(money-coins.head,coins,combos+1)

  }
  recurs(money, coins, 0)
} 
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚在mix中添加了else if语句:

else if(money<0)
    combos
Run Code Online (Sandbox Code Playgroud)

它摆脱了错误,但我的输出是1500的东西:(我的逻辑有什么问题?

scala

8
推荐指数
2
解决办法
6017
查看次数

使用LINQ计算值频率

我有一张桌子

ID|VALUE
Run Code Online (Sandbox Code Playgroud)

VALUE是一个整数字段,可能的值介于0和4之间.如何查询每个值的计数?

理想情况下,结果应该是一个包含6个元素的数组,一个用于计算每个值,最后一个是总行数.

c# sql linq linq-to-sql

7
推荐指数
1
解决办法
8762
查看次数

硬币变化扭曲

我试图通过扭曲来解决经典的动态编程硬币变化问题.这是一个家庭作业的问题,我不是在寻找完整的解决方案,只是为了指出我做错了什么.

输入:

  • x,我们想在硬币支付一定的价值.
  • 设定d面额的硬币可用(1C,5C,10C,25C,100C,200C)的代表数

输出:

  • 需要交换手续付款的最小硬币数量.

假设:

  • 收银机运营商拥有无限量的硬币供应,并知道如何进行最佳改变.

到目前为止我试图做的事情:

我正在尝试构建一个数组C,这样每个元素C [i],是最小/用于交换金额i的硬币数量.

C [0] = 0

对于C [i],我通过对所有可用的硬币面额采取最小的所有C [i-di]加1来计算它.然后我从可用的硬币中取出我挑选的硬币.

这种方法似乎在简单的情况下工作,但是当我有,例如:

99 99 0 0 0 1 0

我的方法失败了,因为它"便宜"到1美元,它将产生2个硬币的交换,而不是支付精确的99美分(交换99个硬币).

任何指针将不胜感激.

algorithm dynamic-programming

7
推荐指数
1
解决办法
633
查看次数

数据透视表与数据透视缓存

刷新数据透视表和刷新底层数据透视表缓存有什么区别?

换句话说,两者之间是否存在差异

PivotTable.PivotCache.Refresh
PivotTable.RefreshTable
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

7
推荐指数
1
解决办法
2652
查看次数

如何判断贪婪算法是否足以找到最小的硬币变化?

最小硬币找零问题是一个NP完全问题,但对于某些套币的贪婪算法(选择最大面额第一)的作品.给定一组表示硬币值的整数,确定贪心算法是否足够的最快算法是什么?一个显而易见的方法是建立你的动态编程解决方案,直到最大面额,并看看它是否产生比贪婪方式更好的解决方案.但有没有更快的"数学方式"检测它?

language-agnostic algorithm np-complete dynamic-programming

6
推荐指数
1
解决办法
5059
查看次数