RQ145 打水漂

RQ57

Uxuard posted @ 2011年7月25日 20:42 in 水题 with tags RQNOJ OI 水题 , 1010 阅读

普通二维背包做法就不说了。看到题解里有一个优化,觉得比较巧妙,说不太清楚,大致是先把time[i]=maxtime-time[i],f[i][j]表示rp是i,rmb是j下的最大剩余时间,然后一般的方程直接套上就行了,这样弄一下把所有东西都满足了...

#include <iostream>

using namespace std;

#define mtime 20000
#define size 100

int main()
{
    int n,maxrmb,maxrp;
    int time[size];
    int rp[size];
    int rmb[size];
    int f[300][300];
    cin >> n;
    for (int i=0;i<n;i++)
    {
        cin >> rmb[i] >> rp[i] >> time[i];
        time[i]=mtime-time[i];
    }
    cin >> maxrmb >> maxrp;
    for (int i=0;i<n;i++)
        for (int j=maxrp;j>=rp[i];j--)
            for (int k=maxrmb;k>=rmb[i];k--)
                if (f[j-rp[i]][k-rmb[i]]+time[i]>f[j][k])
                    f[j][k]=f[j-rp[i]][k-rmb[i]]+time[i];
    cout << mtime-f[maxrp][maxrmb] % mtime;
}

这个..又混了10天...不行啊...


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter