【发布时间】:2016-05-27 19:45:13
【问题描述】:
我正在解决作为作业分配给我的一个问题。我很努力,但无法达到最佳解决方案。
有 N 个商店,所有商店都线性排列,索引为 1,2,3...N。购买任何 来自商店
S(i)的正数商品提供等于H(i)的幸福感。 不幸的是,由于一些不可避免的情况,每个店主都有 引入了一个值L(i)。如果您在ith 商店获得H(i)幸福,则 并且仅当这是您购买东西的第一家商店或您购买时 这家商店至少有一件商品,您最后一次购物的商店是S(j)这样L(j)≤L(i)和j<i。找到最大的幸福总和 按照上面给出的规则获得!
我想应用最大子数组总和并将L(i) 作为标准。这是代码->>
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];
}
这不适用于许多测试用例!有更好的解决方案吗?
【问题讨论】:
-
你用“纸笔”解决方案了吗?
-
你尝试了几个测试用例并编写了解决方案......但意识到这是错误的!
-
我猜有些东西不见了。没有任何条件可以阻止我们从 1 到 N 的所有商店购物。
-
你知道
L可能包含的内容吗?还是那不可用? -
我问是因为如果
L只有不同的、有限的值(比如只有1, 2, 3, or 4),那么您可以使用查找并将复杂性降低到O(N)
标签: c++ algorithm dynamic-programming