记录编号 96741 评测结果 AAAAAAAAAA
题目名称 [USACO Feb14] 奶牛的十项全能 最终得分 100
用户昵称 GravatarFF_Sky||幻 是否通过 通过
代码语言 C++ 运行时间 0.810 s
提交时间 2014-04-14 18:07:09 内存使用 4.87 MiB
显示代码纯文本
  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cmath>
  4. using namespace std;
  5.  
  6. struct arr{
  7. int k,p,a;
  8. }a[21];
  9.  
  10. int b[21][21],f[1200000];
  11. int n,B;
  12.  
  13. int lowbit(int x){
  14. return x&(-x);
  15. }
  16.  
  17. int award(int score,int ii){
  18. for (int i = 0; i < B; i++){
  19. if (score >= a[i].p && a[i].k == ii) score += a[i].a;
  20. }
  21. return score;
  22. }
  23.  
  24. int main(){
  25. freopen("deca.in", "r", stdin);
  26. freopen("deca.out", "w", stdout);
  27. int i,ii,tem,nn,j;
  28. scanf("%d%d",&n,&B);
  29. for (i = 0; i < B; i++){
  30. scanf("%d%d%d",&a[i].k,&a[i].p,&a[i].a);
  31. a[i].k--;
  32. }
  33. for (i = 0; i < n; i++)
  34. for (j = 0; j < n; j++)
  35. scanf("%d",&b[i][j]);
  36. nn = 1<<n;
  37. for (i = 1; i < nn; i++){
  38. tem = i;
  39. ii = 0;
  40. while (tem){
  41. ii++;
  42. tem -= lowbit(tem);
  43. }
  44. for (j = 0; j < n; j++){
  45. if (i&(1<<j)){
  46. f[i] = max(f[i],f[i^(1<<j)]+b[j][ii-1]);
  47. }
  48. }
  49. f[i] = award(f[i],ii-1);
  50. }
  51. printf("%d",f[nn-1]);
  52. return 0;
  53. }