记录编号 49585 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 还是“金明的预算方案” 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.762 s
提交时间 2012-11-08 15:35:43 内存使用 3.96 MiB
显示代码纯文本
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <memory.h>
  5. using namespace std;
  6.  
  7. int weii[65],vall[65],to[65];
  8. int numnofu,weinofu[65],valnofu[65];
  9. int num,val[65][3210];
  10. int numfu,limfu,weifu[65],valfu[65];
  11. int f[3210];
  12.  
  13. int main(void)
  14. {
  15. freopen("budgetb.in","r",stdin);
  16. freopen("budgetb.out","w",stdout);
  17. int i,j,k,lim,n,s;
  18. cin>>lim>>n>>s;
  19. lim/=10;
  20. for (i=1;i<=n;i++)
  21. {
  22. cin>>weii[i]>>vall[i]>>to[i];
  23. vall[i]*=weii[i];
  24. weii[i]/=10;
  25. }
  26. for (i=1;i<=n;i++)
  27. if (to[i]==0)
  28. {
  29. numfu=0;
  30. for (j=1;j<=n;j++)
  31. if (to[j]==i)
  32. {
  33. numfu++;
  34. weifu[numfu]=weii[j];
  35. valfu[numfu]=vall[j];
  36. }
  37. if (numfu==0)
  38. {
  39. numnofu++;
  40. weinofu[numnofu]=weii[i];
  41. valnofu[numnofu]=vall[i];
  42. continue;
  43. }
  44. limfu=lim-weii[i];
  45. num++;
  46. for (j=weii[i];j<=lim;j++)
  47. val[num][j]=vall[i];
  48. for (j=1;j<=numfu;j++)
  49. for (k=limfu;k>=weifu[j];k--)
  50. f[k]=max(f[k],f[k-weifu[j]]+valfu[j]);
  51. for (j=weii[i],k=0;j<=lim;j++,k++)
  52. val[num][j]+=f[k];
  53. memset(f,0,sizeof(f));
  54. }
  55. for (i=1;i<=numnofu;i++)
  56. for (j=lim;j>=weinofu[i];j--)
  57. f[j]=max(f[j],f[j-weinofu[i]]+valnofu[i]);
  58. for (i=1;i<=num;i++)
  59. for (j=lim;j>=1;j--)
  60. for (k=0;k<j;k++)
  61. f[j]=max(f[j],f[k]+val[i][j-k]);
  62. cout<<f[lim]<<endl;
  63. return(0);
  64. }