题目1494:Dota

来源:互联网 发布:达观数据 招聘 编辑:程序博客网 时间:2024/05/19 13:16
#include <stdio.h>  #include <string.h>  const int maxn = 202;  const int maxg = 1002;  int p[maxn];  int v[maxn];  int dp[maxg];  int n, m, g, s;  int i, j, t;      int max(int a, int b){      return a > b ? a : b;  }      int main(){      while(scanf("%d %d %d", &n, &m, &g) != EOF){          memset(dp, 0, sizeof(dp));          memset(p, 0, sizeof(p));          memset(v, 0, sizeof(v));          for (i = 1; i < n + 1; i++) {              scanf("%d", &p[i]);              scanf("%d", &v[i]);           }          int size = n + m + 1;          for (i = n + 1; i < size; i++) {              scanf("%d", &t);                  for (j = 1; j < t + 1; j++) {                  int seq;                  scanf("%d", &seq);                  p[i] += p[seq];                  v[i] += v[seq];              }                             scanf("%d", &s);              v[i] += s;          }          for (i = 1; i < size; i++) {              for (j = p[i]; j <= g; j++) {                  dp[j] = max(dp[j], dp[j - p[i]] + v[i]);              }          }          printf("%d\n", dp[g]);      }      return 0;  }  /**************************************************************    Problem: 1494    User: cust123    Language: C++    Result: Accepted    Time:20 ms    Memory:1028 kb****************************************************************/

0 0
原创粉丝点击