比赛 20121108 评测结果 AAAAAAAAAAAAAWWWWWAA
题目名称 还是“金明的预算方案” 最终得分 75
用户昵称 王者自由 运行时间 0.145 s
代码语言 C++ 内存使用 1.98 MiB
提交时间 2012-11-08 10:29:45
显示代码纯文本
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 3200 + 10, M = 60, S = 15;
struct package {
    int n, v[S], w[S];
} T[M];
int n, m, v[M], p[M], q[M];
int f[N], s;
int main() {
    freopen("budgetb.in","r",stdin);
    freopen("budgetb.out","w",stdout);
    scanf("%d %d %d", &n, &m, &s);
    n /= 10;
    for(int i=1; i<=m; i++) {
        scanf("%d %d %d", &v[i], &p[i], &q[i]);
        v[i] /= 10;
        if(!q[i]) {
            T[i].n++;
            T[i].v[1] = v[i];
            T[i].w[1] = v[i] * p[i];
        }
    } int u = 0;
    for(int i=1; i<=m; i++) if((u = q[i]))
        for(s = T[u].n; s > 0; s--) {
            T[u].n++;
            T[u].v[T[u].n] = T[u].v[s] + v[i];
            T[u].w[T[u].n] = T[u].w[s] + v[i] * p[i];
        }
    for(int i=1; i<=m; i++) if(T[i].n)
        for(int k=n; k>=0; k--)
            for(int j=1; j<=T[i].n; j++) if(k >= T[i].v[j])
                f[k] = max(f[k], f[k - T[i].v[j]] + T[i].w[j]);
    printf("%d\n", f[n] * 10);
    return 0;
}