【发布时间】:2020-06-02 17:29:44
【问题描述】:
我遇到了一个练习问题,其中给了我一个数组,我想从中删除某些元素,以便总和小于给定值,但总和应该接近给定值。
让值是 17 并且给定的数组是 [2, 5, 6 , 8] 然后我可以删除元素 2nd 使得新数组变为 [2, 6, 8] 并且获得的总和为 16。假设数组以递增的顺序排列。
我的尝试:
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int main(){
ll a,b;
cin>>a>>b;
vector<ll> v;
map<ll,vector<ll>> mp;
ll sum=0;
for(ll i=0;i<b;i++){
ll x;
cin>>x;
v.push_back(x);
mp[x].push_back(i);
sum+=x;
}
for(auto x:v) cout << x << " ";
cout << endl;
// cout << sum << endl;
if(sum<=a){
cout << b << endl;
for(ll i=0;i<b;i++){
cout << i << " ";
}
cout << endl;
}
else{
// sort(v.begin(),v.end());
vector<ll> ind;
cout << "sum:" << sum<< endl;
for(auto i=v.begin();i!=v.end();++i){
cout << "i val:" << (*i) << endl;
sum = sum - (*i);
ind.push_back(*mp[*i].begin());
mp[*i].erase(mp[*i].begin());
v.erase(i-1,i);
for(auto x:v) cout << x << " ";
cout << endl;
if(sum>a) continue;
else break;
}
cout << sum << endl;
}
}
【问题讨论】:
-
我什至不是要代码,我只是要逻辑。
-
结果中有多少元素是否重要?如果您的数组是
{1, 1, 1, 1, 2, 2}并且您的目标总和是'4',那么{1, 1, 1, 1}是否与{2, 2}一样有效?测量到目标的距离时是否偏好符号?如果您的数组是{1, 3}而您的目标是2,那么{1}是否与{3}一样有效? -
@John 在这种情况下,生成的数组大小无关紧要,这只是我在优化算法时遇到的问题。
-
@SamVarshavchik 我已经添加了您所要求的“我的尝试”,如果您能提供帮助将很高兴。
标签: c++ algorithm optimization