文章
5
粉丝
10
获赞
10
访问
2.5k
感觉这道题有点问题,因为用贪心思想居然能过,以下是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 ...
    
登录后发布评论
暂无评论,来抢沙发