小编tin*_*yaa的帖子

了解寻找最佳策略的解决方案,包括挑选金罐

我无法理解CareerCup这个问题的解决方案背后的原因.

黄金游戏:两个玩家A和B.有一排金币排成一行,每个包含一些金币(玩家可以看到每个金罐中有多少硬币 - 完美的信息).他们得到交替转弯,玩家可以从线的一端挑选一个底池.获胜者是最终拥有更多硬币的玩家.目标是"最大化"A收集的硬币数量,假设B也是最佳的.A开始游戏.

我们的想法是找到一个最佳策略,让A赢知道B也是最优秀的.你会怎么做?

最后我被要求编写这个策略!

这是谷歌采访中的一个问题.

建议的解决方案是:

function max_coin( int *coin, int start, int end ):
    if start > end:
        return 0

    // I DON'T UNDERSTAND THESE NEXT TWO LINES
    int a = coin[start] + min(max_coin(coin, start+2, end), max_coin(coin, start+1, end-1))
    int b = coin[end] + min(max_coin(coin, start+1,end-1), max_coin(coin, start, end-2))

    return max(a,b)
Run Code Online (Sandbox Code Playgroud)

有两个我不明白的特定部分:

  1. 在第一行中为什么我们使用范围[start + 2,end]和[start + 1,end-1]?它总是留下一个硬币罐.不应该是[开始+ 1,结束]因为我们把起始硬币罐拿出来了吗?
  2. 在第一行中,为什么我们取两个结果中的最小值而不是最大值?
  3. 因为我很困惑为什么两条线路最小化以及为什么我们选择那些特定范围,我不确定究竟是什么ab实际代表什么?

algorithm

9
推荐指数
2
解决办法
7220
查看次数

`bx`和`bp`之间的区别?

bxbp装配有什么区别?这里的例子:

mov bx, 1h
mov bp, 1h
Run Code Online (Sandbox Code Playgroud)

他们引用相同的内存吗?它是用相同的sssp

assembly masm masm32

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

Les的教学目的?

les集会教学的目的是什么?

为什么我们需要加载es寄存器?本书给出了以下示例:

les    bx, p           ; Load p into ES:BX
mov    es:[bx], al     ; Store away AL
Run Code Online (Sandbox Code Playgroud)

为什么我们需要加载es , bx在这种情况下?

另外我们为什么要用es:[bx]?如果p指向存储器100H,是不能同时esbx100H = 200H( bx+es)?

x86 assembly masm

6
推荐指数
2
解决办法
6148
查看次数

bt汇编指令

我对bt汇编指令有所了解.我摘录了部分书籍以提供背景信息.请看最后一个例子bt Testme, bx.为什么复制TestMe+8?不应该复制TestMe+65

非常感谢你的帮助!

6.6.4.2位测试指令:BT,BTS,BTR和BTC

在80386或更高版本的处理器上,您可以使用bt指令(位测试)来测试单个位.它的第二个操作数指定第一个操作数的位索引.Bt将寻址的位复制到进位标志中.例如,指令

  bt  ax, 12
Run Code Online (Sandbox Code Playgroud)

将第12位斧头复制到进位标志中.

bt/bts/btr/btc指令仅处理16或32位操作数.这不是指令的限制.毕竟,如果你想测试al寄存器的第三位,你可以很容易地测试ax寄存器的第三位.另一方面,如果索引大于寄存器操作数的大小,则结果是未定义的.

如果第一操作数是存储位置,在BT测试指令在索引的给定的存储器偏移量,而不管值的比特.例如,如果bx包含65则

  bt  TestMe, bx
Run Code Online (Sandbox Code Playgroud)

将位置TestMe + 8中的第一位复制到进位标志中.再一次,操作数的大小无关紧要.对于所有意图和目的,内存操作数是一个字节,您可以使用适当的索引测试该字节后的任何位.实际的位bt测试是位位置索引mod 8和存储器偏移有效地址+ index/8.

x86 assembly masm masm32

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

如何在EmberJS 2.2路由器中使用动态段?

我无法弄清楚如何在EmberJS的新路由器API中创建具有动态段的路由.我花了一个星期的时间来尝试很多东西,但它不起作用.我对自己感到非常沮丧,因为我已多次浏览文档,API和源代码,无法弄清楚如何使这项工作.我渴望得到帮助.

我正在尝试实现以下路线:

  • / profile /:userId - > index
  • / profile /:userId/activity - >活动页面
  • /资料/:用户名/ ...

我的路由器设置如下

App.Router.map(function() {
  return this.resource("profile", function() {
    this.route("index", { path: '/:userId' });
    this.route("activity", { path: '/:userId/activity' });
  });
});
Run Code Online (Sandbox Code Playgroud)

然后,每当我尝试与linkTo帮助程序链接时,我收到以下错误:Uncaught More objects were passed than dynamic segments

<li>{{#linkTo "profile.index" user}}overview{{/linkTo}}</li>
Run Code Online (Sandbox Code Playgroud)

如果我不包含该user对象,那么我会收到另一个错误Uncaught Error: assertion failed: Cannot call get with 'id' on an undefined object.(显然是因为没有对象可以获取该ID)

如果它是任何助手,这是我的路线声明

App.ProfileIndexRoute = Ember.Route.extend({
  model: function(params) {
    return Ember.Object.create({
      id: 1
    });
  },
  setupController: function(controller, …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-router

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

mov ax,bx vs. mov ax,[bx]

以下两行有什么区别?

mov ax, bx
mov ax, [bx]
Run Code Online (Sandbox Code Playgroud)

如果bx包含值100h且存储器地址100h的值为23,那么第二个复制23到ax

另外,以下两行之间有什么区别?

mov ax, 102h ; moves value of 102h into register ax
mov ax, [102h] ; Actual address is DS:0 + 102h
Run Code Online (Sandbox Code Playgroud)

assembly masm masm32

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

静态局部变量中的竞争条件

我目前正在阅读Effective C++.有一个关于使用静态局部变量的部分,它说如果多个线程访问一个静态变量,那么在该变量的初始化期间可能存在竞争条件.

至少这是我的解释.这是真的?例如,在C#中,类静态变量的初始化永远不会有竞争条件.

例如,此代码在静态变量初始化期间是否具有竞争条件?

FileSystem& tfs()
{
    static FileSystem fs;
    return fs;
}
Run Code Online (Sandbox Code Playgroud)

以下是本书的除外.

这是应用于tfs和tempDir的技术:

class FileSystem { ... }; // as before

FileSystem& tfs() // this replaces the tfs object; it could static in the FileSystem class
{
    static FileSystem fs; // define and initialize a local static object
    return fs; // return a reference to it
}
Run Code Online (Sandbox Code Playgroud)

.

class Directory { ... }; // as before

Directory::Directory( params ) // as before, except references to tfs are now …
Run Code Online (Sandbox Code Playgroud)

c++ singleton multithreading initialization race-condition

4
推荐指数
1
解决办法
2057
查看次数

x86寄存器名称,寻址模式,位移和存储

我有一些关于装配的问题,我正在学习,我很困惑.

  1. 是什么区别bxbpsssp?书中说这bx是基址寄存器,bp是基指针.这是否意味着他们是一回事?
  2. 是用什么区别mov ax, bx,mov ax, [bx],mov ax, bpmov ax, [bp]
  3. disp索引寻址模式意味着什么?比如mov al, disp[bx]?还是mov al, disp[si]?这本书没有解释的含义disp.
  4. 寄存器在CPU中不是RAM吗?

    请原谅我的英文,这不是我的第一个语言.

x86 assembly masm addressing-mode

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

寄存器如何处理?

根据书中的说法,寄存器是CPU中存储空间小的地方(例如16位CPU上的16位).那么CPU寄存器如何具有地址?如果它不在内存中而是在CPU上,我们如何能够为其添加位移?

示例:

mov ax, [bx+1000h]
Run Code Online (Sandbox Code Playgroud)

assembly masm cpu-registers masm32

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

这个Ruby代码如何工作 - 如果-stmt有范围?

我目前正在学习Ruby,我似乎无法将其包裹起来if /start/../end......帮助?

while gets
  print if /start/../end/
end
Run Code Online (Sandbox Code Playgroud)

ruby

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

在EmberJS 1.0.0-pre.4中检测路由转换

我试图检测何时发生路由转换.我已将此代码段放在最新版本的Ember(v1.0.0-pre.4)中,用于处理转换:

  didTransition: function(infos) {
    // Don't do any further action here if we redirected
    if (infos[infos.length-1].handler.transitioned) { return; }

    var appController = this.container.lookup('controller:application'),
        path = routePath(infos);

    set(appController, 'currentPath', path);
    this.notifyPropertyChange('url');

    if (get(this, 'namespace').LOG_TRANSITIONS) {
      Ember.Logger.log("Transitioned into '" + path + "'");
    }
  },
Run Code Online (Sandbox Code Playgroud)

我将我的Ember应用程序设置为window.App = Ember.Application.create().

我注意到它调用了this.notifyPropertyChange('url');,但我试图将一个观察者附加到我的应用程序,App.Router或者App.Router.router我得到一个错误,因为它没有实现Ember.Observable.

如何更改路径路径而不为每条路线创建特殊的Ember.Route?

ember.js ember-router

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