草庐IT

c++ - 如果我的钱有限,如何在 DAG 中找到最便宜的方式?

因此,如果我有一个有向无环图,其中每条边的成本为0或大于0,如果它大于0,它将具有负权重(所以你可以花5美元得到它,它会缩短例如,按您的方式-20)。我知道我们可以很容易地在DAG中找到最短/最便宜的方式,但是如果我们的钱有限怎么办?那么想象下一种情况:我们有8block钱。该算法会找到最短路径,即-10+-3=-13,但它会花费12,但我们只有8block钱,所以它不是一个选项。理想的路径是-10+0,只花费7钱。有没有一种算法可以用来解决这个问题? 最佳答案 这个问题是NP-Hard,减少了Knapsack-Problem.简短

c++ - 找到气体容器的最小必要体积

我在比赛的某个地方发现了这个问题,但还没有想出解决方案。ThereistheNcitieswithcoordinates(x,y).Ihavetogofromfirstcityandreachthesecondcity.Thereisagasstationineachcity.SoIhavetofindminimumnecessaryvolumeofgascontainertoreachthefinalcity.Forexample:Input:3174194185Output:1.414在这里,我的方法是:1->3->2我正在使用简单的暴力破解方法,但速度太慢了。如何优化我的代码?也

c++ - 有没有办法以随机顺序找到下一个项目?

我知道有这样一个程序:#include#includeintmain(){conststd::stringalphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";std::stringtemp="1234567890";srand(MAGICNUMBER);for(inti=0;;++i){for(intj=0;j基本上,随机的10符号字符串生成器。我还知道第124660967个生成的字符串是“2lwd9JjVnE”。有没有办法找到MAGICNUMBER是什么,或者至少找到序列中的下一个字符串?

c++ - 如何找到网格中两个单元格之间路径中的最窄点

我正在为rts游戏编写机器人(在网格map上一个村庄对另一个村庄,还有可交叉的单元格-草地,森林-和不可交叉的单元格-水,山丘)。如何找到这两个单元格之间路径上的最窄点?对算法有什么建议吗?(我正在使用A*找到最近的路径,我想机器人决定在哪里放置塔(坚固的防御建筑),放置在最窄的点上,这样敌人就不能绕过-可能可以,取决于map,但不太可能). 最佳答案 一些想法。考虑一个(可能太多了)简化版本,其中X代表不可交叉的单元格,.代表crossable,A代表一个村庄,B代表另一个。XXXA.XXXXXXXX..XXXXXXX.....X

c++ - 如何找到应该是 const 的 C++ 函数?

我有这个代码:#includeclassA{public:intdoit(){return5;}intdoit2()const{i++;returni;}inti;};intmain(){Aa;printf("%d\n",a.doit());return0;}使用g++-Wall-Wpedanticmain.cpp可以干净地编译。有没有办法让g++说“A::doit()应该标记为const”?g++4.8有-Wsuggest-attribute=const但在这种情况下它似乎不起作用。g++-Wall-Wpedantic-Wsuggest-attribute=constconst_ma

找到最小数量的拍摄数量以确保猴子被击中?

您是森林中的猎人,想在一群连接的树木上射击一只猴子。我们可以一次拍摄一次。每次射击后,猴子都会跳到相邻的树上。每次拍摄时,都需要改变其位置。确保猴子被枪击的最低镜头是什么?作为输入,我们得到了彼此相邻的树列表。例如:让我们考虑以下3个图:对于(i)图:我们可以按照节点的顺序拍摄:2332。我们肯定会按照此顺序进行猴子射击。对于(ii)图:((如果我们从图表中删除节点10)订单将是:234567765432.对于(iii)图:解决方案是不可能的。以下是我已经实施的算法的简要概述,以提出解决方案:检查循环是否在给定的无向图中显示。(我们可以通过实现DF并跟踪访问和父节点来做到这一点。)如果存在循环

c++ - 对象 std::shared_ptr 是否可以通过它的 std::weak_ptr 找到?

所以我有一个std::vector>myListOfT;我有一个std::weak_ptrptrToOneT;它是从用于填充该容器的指针之一创建的(假设我将它放在回调函数中)。威尔std::find在那个容器和我的weak_ptr给我一个原始shared_ptr的迭代器(如果集合中存在这样的一个)?它是在标准的某处得到保证还是依赖于此实现? 最佳答案 通过使用std::weak_ptr::owner_before,我们可以不锁定weak_ptr。我将使用比必要的稍微冗长的解决方案并引入owner_equal,它与std::owner

c++ - std::swap 是否保证通过 ADL 找到非成员交换?

这个问题在这里已经有了答案:DoesC++11changethebehaviorofexplicitlycallingstd::swaptoensureADL-locatedswap'sarefound,likeboost::swap?(4个答案)关闭6年前。TorstenT.Will关于C++11的教科书说,自C++11起,std::swap将使用ADL找到的非成员swap,如果定义了这样一个非成员函数,因此模式usingstd::swap;swap(obj1,obj2);总是可以被简单的替换std::swap(obj1,obj2);很遗憾,我在其他任何地方都没有找到这样的声明。什么

c++ - 找到小于特定值的最大排列

这是一个我似乎不知道如何解决的特定编程问题。Giventwointegersaandb,findthelargestpermutationofthedigitsofathatislessthanb.有什么方法可以在c++中使用next_permutation函数?或者,我应该使用某种形式的动态规划来解决这个问题吗?我尝试使用next_permutation函数测试a的所有排列,但因为整数的大小可以达到10^18、18!太大了,这不可行。有什么办法可以减少时间吗?如果不是,我应该如何使用动态规划来解决这类问题?我将不胜感激任何形式的帮助。非常感谢你们! 最佳答

c++ - 如果方法是const,如何找到 vector 的中值?

我创建了一个名为Collect的方法,它将一堆值添加到vector中(如下所示)voidMedian::Collect(doubledatum){myVector.push_back(datum);}我需要创建一个方法来计算我在上述方法中收集到的vector中的所有值的中位数。函数定义写在下面/*Calculatesthemedianofthedata(datum)fromtheCollectmethod.*/doubleMedian::Calculate()const{}所以我知道我首先需要对vector进行排序才能找到中位数。以下是我的尝试:doubleMedian::Calcul