记录编号 49592 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 还是“金明的预算方案” 最终得分 100
用户昵称 Gravatar王者自由 是否通过 通过
代码语言 C++ 运行时间 0.074 s
提交时间 2012-11-08 15:48:10 内存使用 2.20 MiB
显示代码纯文本
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 32000 + 10, M = 60 + 10, S = 10 + 10;
int n, m, s;
int v[M], p[M], q[M], w[M];
int a[N], f[N];
int main() {
    freopen("budgetb.in","r",stdin);
    freopen("budgetb.out","w",stdout);
    scanf("%d %d %d", &n, &m, &s);
    for(int i=1; i<=m; i++) {
        scanf("%d %d %d", &v[i], &p[i], &q[i]);
        w[i] = v[i] * p[i];
    }
    for(int i=1; i<=m; i++) if(!q[i]) {
        fill_n(a, v[i], 0);
        for(int j=v[i]; j<=n; j++)
            a[j] = f[j - v[i]] + w[i];
        for(int j=1; j<=m; j++) if(q[j] == i)
            for(int k = n; k >= v[i] + v[j]; k--)
                a[k] = max(a[k], a[k - v[j]] + w[j]);
        for(int j=v[i]; j<=n; j++)
            f[j] = max(f[j], a[j]);
    }
    printf("%d\n", f[n]);
    return 0;
}