题解 P1910 【L国的战斗之间谍】

· · 题解

这道题是有多㝽(shui)

用深搜10分钟就打完了。。。

看代码不需要解释

C++: /*****

> Author: wzw-cnyali
> Created Time: 2017/2/26 9:48:48

****/

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define REP(i, a, b) for(register int i = (a), i##_end_ = (b); i <= i##_end_; ++ i)
#define DREP(i, a, b) for(register int i = (a), i##_end_ = (b); i >= i##_end_; -- i)
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define mem(a, b) memset((a), b, sizeof(a))
template<typename T> inline bool chkmin(T &a, const T &b) { return a > b ? a = b, 1 : 0; }
template<typename T> inline bool chkmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }
typedef long long LL;
const int Size = 100000;
const int inf = 0x3f3f3f3f;
int read()
{
    int sum = 0, fg = 1; char c = getchar();
    while(c < '0' || c > '9') { if (c == '-') fg = -1; c = getchar(); }
    while(c >= '0' && c <= '9') { sum = sum * 10 + c - '0'; c = getchar(); }
    return sum * fg;
}
int a[Size], b[Size], c[Size];
int A, B, C;
int N, M, X;
int ans;
void dfs(int x)
{
    if(B > M || C > X) return;
    ans = max(ans, A);
    if(x > N) return;
    A += a[x];
    B += b[x];
    C += c[x];
    dfs(x + 1);
    A -= a[x];
    B -= b[x];
    C -= c[x];
    dfs(x + 1);
}
int main()
{
    N = read(), M = read(), X = read();
    REP(i, 1, N)
    {
        a[i] = read(), b[i] = read(), c[i] = read();
    }
    dfs(1);
    printf("%d\n", ans);
    return 0;
}