最后一个点wa了,代码已加注释
查看原帖
最后一个点wa了,代码已加注释
1261163
Yjf666楼主2024/3/21 20:28

我用的是先合并相同物品,再计算价值排序的方法,跟题解里的一个很像,但是第五点wa了。本来想看之前的帖子来debug的,结果发现打不开,只能相信后人的智慧了

#include<bits/stdc++.h>
using namespace std;
int cmp(int a, int b)//定义降序排序规则
{
    return a > b;
}
int main()
{
    int bag = 21;
    int n, m, a[110], b[110], c[110], v[110] = {}, sum = 0;
    string str[110];
    cin >> m>> n;
    if (n == 0 || m == 21)//可预测的条件判断
    {
        cout << 0;
        return 0;
    }
        
    for (int i = 1; i <= n; i++)//输入
    {
        cin >> a[i] >> b[i] >> c[i] >> str[i];
    }
    bag = bag - m;//背包剩余容量
    for (int i = 1; i < n; i++)
    {
        for (int j = i+1; j <= n; j++)
        {
            if (a[i] == c[i])//若背包满
                break;
            if (str[i] == str[j])//若id相同
            {
                if (a[i] + a[j] <= c[i])//若加起来不满
                {
                    a[i] += a[j];
                    a[j] = 0;
                }
                else {//若满
                    a[i] = c[i];
                    a[j] -= c[i] - a[i];
                }
            }
        }
    }
    for (int i = 1; i <= n; i++)//计算价值
    {
        v[i] = a[i] * b[i];
    }
    sort(v , v + 110,cmp);//价值降序排
    for (int i = 0; i < bag; i++)
        sum += v[i];
    cout << sum;
    return 0;
}
2024/3/21 20:28
加载中...