有 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 …
段寄存器用于将可寻址存储器的范围从 64K 字节增加到 1M 字节。但是,我很难理解堆栈段寄存器(SS),因为堆栈已经有两个与之关联的其他寄存器:sp和bp。
假设我将SS设置为5000h ,然后决定通过初始化bp和sp寄存器来初始化堆栈。最初堆栈应该是空的。因此,sp和bp最初应该具有相同的内容。我可以使用任何随机地址初始化sp吗?或者我会有一些限制吗?
例如,用地址7000h初始化sp可以吗
assembly bootloader memory-segmentation x86-16 stack-pointer