我正在解决一个给我的问题。我努力但无法达到最佳解决方案。
有N个商店,所有商店都线性对齐,索引1,2,3 ... N.买任何 商店
S(i)
中的正数项目给出的幸福感等于H(i)
。 不幸的是,由于一些不可避免的情况,每个店主都有 引入了值L(i)
。如果您被H(i)
商店认定为i
幸福 并且只有这是您购买的第一家商店或者您购买的商品 此商店中至少有一件商品和您购买的最后一家商店是S(j)
这样L(j)≤L(i)
和j<i
。找到可以达到的最大幸福总和 按照上面给出的规则获得!
我认为应用最大子阵列总和以及L(i)
作为标准。这是代码 - &gt;&gt;
long long ans=INT_MIN, temp=0, prev=-1;
for(int i=0;i<n;i++){
l = L[i];
if(l>=prev){
temp+=H[i];
if(temp<0){
temp = 0;
prev = -1;
}
if(temp>ans){
ans = temp;
prev=L[i];
}
}
else{
if(H[i]>ans){
ans = H[i];
prev = L[i];
temp = H[i];
}
else if(H[i] == ans && L[i]<prev)
prev = L[i];
}
这不适用于许多测试用例!有更好的解决方案吗?
答案 0 :(得分:2)
如果最后一家商店是i,那么F [i]等于可获得的最大幸福感。
您可以通过计算所有有效前驱(j
然后你能做的最好的就是F [i]中的最大值。
答案 1 :(得分:0)
L [i]将确定您可以采取的可能路径,因此我认为您应该能够构建具有L [i]的不同起点的多个树,其中每个节点包含H [i]作为值。 然后你对这棵树进行遍历,每次休假的总和可以给你带来快乐。