4 条题解
-
4
这道题实际上是一个贪心算法。不要被“背包模型应用1”给迷惑住!
简简单单一个排序,走你~
#include <bits/stdc++.h> using namespace std; int n; long long m, a[100005], sum; int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> a[i]; } sort(a + 1, a + n + 1); for (int i = 1; i <= m; i++) { sum += a[i] + i - 1; } cout << sum; return 0; }
-
1
不要被“背包模型应用1”给迷惑住,这道题实际上是一个贪心算法。 排序后选择价值最小的,加上对应的涨价就可以了。
代码
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main(void){ int n,k; long long ans = 0; cin>>n>>k; vector<int> a(n); for(int i=0;i<n;i++) cin>>a[i]; sort(a.begin(),a.end()); for(int i=0;i<k;i++) ans+=a[i]+i; cout<<ans; return 0; }
-
1
排序后选出价值最小的k个进行购买,并计算对应的涨价即可。
代码
#include <bits/stdc++.h> using namespace std; int n; long long k, a[100005], ans; int main() { cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i]; sort(a + 1, a + n + 1); for (int i = 1; i <= k; i++) ans += a[i] + i - 1; cout << ans; return 0; }
- 1
信息
- ID
- 388
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- (无)
- 递交数
- 314
- 已通过
- 198
- 上传者