30分求教qwq

P1064 [NOIP2006 提高组] 金明的预算方案

Mikamedo @ 2018-08-15 16:47:10

#include<iostream>
using namespace std;
struct thing
{
    int v;
    int p;
    int q;
    thing *f1;
    thing *f2;
}a[65];
int n, m;
bool firstf[65] = { true };
int ans;
void DFS(int k, int sumofmoney,int sum)
{
    if (sumofmoney > n)
        return;
    else if (k == m + 1)
    {
        if (sum > ans)
            ans = sum;
        return;
    }
    else if (a[k].q > 0)
    {
        DFS(k + 1, sumofmoney, sum);
        return;
    }
    DFS(k + 1, sumofmoney + a[k].v, sum + a[k].v*a[k].p);
    DFS(k + 1, sumofmoney, sum);
    if (a[k].f1 != NULL)
        DFS(k + 1, sumofmoney + a[k].v + a[k].f1->v,sum + a[k].v*a[k].p + a[k].f1->v*a[k].f1->p);
    else if(a[k].f2!=NULL)
        DFS(k + 1, sumofmoney + a[k].v + a[k].f2->v,sum + a[k].v*a[k].p + a[k].f2->v*a[k].f2->p);
    if (a[k].f2 != NULL && a[k].f1 != NULL)
        DFS(k + 1, sumofmoney + a[k].v + a[k].f1->v + a[k].f2->v, sum + a[k].v*a[k].p + a[k].f1->v*a[k].f1->p + a[k].f1->v*a[k].f1->p);
}
int main()
{
    cin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        cin >> a[i].v >> a[i].p >> a[i].q;
        if (a[i].q > 0)
        {
            if (firstf[i])
            {
                a[a[i].q].f1 = &a[i];
                firstf[i] = false;
            }
            else
                a[a[i].q].f2 = &a[i];
        }
    }
    DFS(1, 0, 0);
    cout << ans;
}

by Mikamedo @ 2018-08-15 16:49:27

@A_P_I果然还是我太菜了吗


by Hexarhy @ 2018-08-15 17:11:55

@A_P_I~~ 我觉得你还需要一个构造函数QWQ~~

本蒟蒻看不懂……能别用指针吗


by xjyf @ 2018-08-15 17:15:36

这题好像不用这么麻烦 直接用01背包就行了 列一下动态转移方程 再进行标准的背包套路 一切都解决了


by xjyf @ 2018-08-15 17:21:00

f2[i]=max(f2[i],f2[i-a[j].p]+a[j].v),f1[i]=max(f1[i],f2[i]) a[j].p 即价格 v[j], a[j].v 即重要性 w[j]


by Mikamedo @ 2018-08-16 12:52:29

@xjyf 嗯……我用的难道不是背包(ノ`Д)ノ 天哪!


by Mikamedo @ 2018-08-16 12:54:33

@黄H睿R

指针只是用来判断它的附件


by Mikamedo @ 2018-08-16 12:57:19

qwq


by Mikamedo @ 2018-08-16 12:58:17

~


by xjyf @ 2018-08-16 14:54:52

@A_P_I眼瞎。。。。。。结构体加指针,这么华丽的程序亮瞎了我的眼


by Mikamedo @ 2018-08-16 16:33:33

@xjyf 555 不,是我的菜蒙蔽了你的双眼qwq


|