文章
3
粉丝
10
获赞
3
访问
378
感觉这道题有点问题,因为用贪心思想居然能过,以下是ac的贪心代码。但是当n=3,m=6,数组元素分别为3 4 5时,实际答案是2,但是用以下代码则输出-1。这道题的正解应该是dfs与动态规划。
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a, int b) {
return a > b;
}
int main() {
int t,n,m;
cin >> t;
while (t--) {
cin >> n >> m;
vector<int> v(n);
for (int i = 0; i < n; i++)
cin >> v[i];
sort(v.begin(), v.end(), cmp);
int ans = 0;
for (int i = 0; i < n; i++) {
while (m - v[i] >= 0)
m -= v[i], ans++;
if (m == 0)
break;
}
cout << (m>0 ? -1 : ans) << endl;
}
return 0;
}
同样ac的dfs代码
#include<bits/stdc++.h>
using namespace std;
const int MAX = -(1 << 31) - 1;
bool cmp(int a, int b) {
return a > b;
}
void dfs(vector<int> v,int k, int maxSelect,int m,int& ans, int& sum) {
if (ans ...
登录后发布评论
暂无评论,来抢沙发