CodeForces

来源:互联网 发布:钢结构强度校核软件 编辑:程序博客网 时间:2024/06/10 13:20

整理一下


#include<bits/stdc++.h>using namespace std;const int maxn = 100 + 7;int n, max_;int ans[20*maxn];int path[maxn][20*maxn];struct node {    int t, d, v, id;} a[maxn];bool cmp(node a, node b) {    return a.d < b.d;}void init() {    cin >> n;    for(int i = 0; i < n; ++i) {        cin >> a[i].t >> a[i].d >> a[i].v;        a[i].id = i + 1;        max_ = max(max_, a[i].d);    }    sort(a, a+n, cmp);}void solve() {    memset(ans, 0, sizeof ans);    memset(path, 0, sizeof path);    for(int i = 0; i < n; ++i) {        for(int j = a[i].d; j > a[i].t; --j) {            if(ans[j-a[i].t]+a[i].v > ans[j]) {                ans[j] = ans[j-a[i].t]+a[i].v;                path[i][j] = 1;            }        }    }    int maxx = 0, id = 0;    for(int j = 0; j <= max_; ++j)        if(ans[j] > maxx) {            maxx = ans[j];            id = j;        }    cout << maxx << endl;    stack<int> sk;    int cnt = 0;    int i = n-1, j = id;    while(i >= 0 && j >= 0) {        if(path[i][j] == 1) {            sk.push(a[i].id);            cnt++;            j -= a[i].t;        }        i--;    }    cout << cnt << endl;    while(!sk.empty()) {        cout << sk.top();        sk.pop();        if(sk.empty()) cout << endl;        else cout << " ";    }}int main() {    ios::sync_with_stdio(0);    init();    solve();    return 0;}


原创粉丝点击