小编kum*_*arp的帖子

最大数据包数

有 r 个红球、g 个绿球和 b 个蓝球。此外,还有无限数量的数据包提供给您。每包只能装 3 个球,并且应包含至少 2 种不同颜色的球。求最多可以装多少个包?

这是我使用动态规划的方法,它很简单

    map<multiset<int>,int> store;

int packets(int r,int g,int b){
    if (r<0||g<0||b<0){
        return 0;
    }
    if (r==g&&g==b){
        return r;
    }
    if ((r+g==0)||(g+b==0)||(b+r==0)){
        return 0;
    }
    if (r==0&&b==0&&g==0){
        return 0;
    }
    multiset<int> key;
    key.insert(r);key.insert(g);key.insert(b);
    if (store.find(key)!=store.end()){
        return store[key];
    }
    int max_packets = packets(r-2,g-1,b)+1;
    max_packets = max(max_packets,packets(r-2,g-1,b)+1);
    max_packets = max(max_packets,packets(r-1,g-2,b)+1);
    max_packets = max(max_packets,packets(r-2,g,b-1)+1);
    max_packets = max(max_packets,packets(r-1,g,b-2)+1);
    max_packets = max(max_packets,packets(r,g-2,b-1)+1);
    max_packets = max(max_packets,packets(r,g-1,b-2)+1);
    max_packets = max(max_packets,packets(r-1,g-1,b-1)+1);
    store[key] = max_packets;
    return max_packets;
}
Run Code Online (Sandbox Code Playgroud)

我的解决方案may be …

c++ algorithm

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

无法理解堆栈段寄存器

段寄存器用于将可寻址存储器的范围从 64K 字节增加到 1M 字节。但是,我很难理解堆栈段寄存器(SS),因为堆栈已经有两个与之关联的其他寄存器:spbp

假设我将SS设置为5000h ,然后决定通过初始化bpsp寄存器来初始化堆栈。最初堆栈应该是空的。因此,spbp最初应该具有相同的内容。我可以使用任何随机地址初始化sp吗?或者我会有一些限制吗?

例如,用地址7000h初始化sp可以吗

assembly bootloader memory-segmentation x86-16 stack-pointer

0
推荐指数
1
解决办法
1172
查看次数