求助,为什么重量和价值数组用了vector来存全RE了
  • 板块P1833 樱花
  • 楼主Norato
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/4/11 17:15
  • 上次更新2023/11/5 00:41:02
查看原帖
求助,为什么重量和价值数组用了vector来存全RE了
387613
Norato楼主2021/4/11 17:15

代码如下

#include <stdio.h>
#include <iostream>
#include <vector>

using namespace std;
vector<int> w, v;
int W, n, dp[100010];
bool mark[101000];

int main()
{
    int t1, t2, t3, t4;
    scanf("%d:%d %d:%d %d", &t1, &t2, &t3, &t4, &n);
    W = t3 * 60 + t4 - t1 * 60 - t2;
    int wt, vt, nt, cnt;
    for (int i = 0; i < n; i++)
    {
        scanf("%d %d %d", &wt, &vt, &nt);
        if (nt)
        {
            int c = 1;
            while (nt - c > 0)
            {
                nt -= c;
                w.push_back(c * wt);
                v.push_back(c * vt);
                c <<= 1;
                cnt++;
            }
            w.push_back(nt * wt);
            v.push_back(nt * vt);
            cnt++;
        }
        else
        {
            mark[cnt] = true;
            w.push_back(wt);
            v.push_back(vt);
            cnt++;
        }
    }
    for (int i = 0; i < cnt; i++)
    {
        if (!mark[i])
        {
            for (int j = W; j >= w[i]; j--)
            {
                dp[j] = dp[j] > dp[j - w[i]] + v[i] ? dp[j] : dp[j - w[i]] + v[i];
            }
        }
        else
        {
            for (int j = 0; j <= W - w[i]; j++)
            {
                dp[j + w[i]] = dp[j + w[i]] > dp[j] + v[i] ? dp[j + w[i]] : dp[j] + v[i];
            }
        }
    }
    printf("%d\n", dp[W]);
    return 0;
}
2021/4/11 17:15
加载中...