记录编号 80642 评测结果 AAAAAAAAAA
题目名称 [NOIP 2010冲刺二]宝物筛选 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.745 s
提交时间 2013-11-07 14:20:33 内存使用 0.47 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<algorithm>
  5. #include<vector>
  6. #include<deque>
  7. #include<set>
  8. using namespace std;
  9. const int SIZEW=4*10000+1;
  10. int N,W;
  11. int f[SIZEW]={0};
  12. void singlerelax(int nowv,int noww){//价值nowv重量noww
  13. int i;
  14. for(i=W;i>=noww;i--) f[i]=max(f[i],f[i-noww]+nowv);
  15. for(i=1;i<=W;i++) f[i]=max(f[i],f[i-1]);
  16. }
  17. void relax(int nowv,int noww,int num){//单件:价值nowv,重量noww,共nowm个
  18. int ind=1;
  19. while(true){
  20. if(num>=ind){
  21. singlerelax(nowv*ind,noww*ind);
  22. num-=ind;
  23. }
  24. else{
  25. singlerelax(nowv*num,noww*num);
  26. return;
  27. }
  28. ind*=2;
  29. }
  30. }
  31. void work(void){
  32. scanf("%d%d",&N,&W);
  33. int nowv,noww,nowm;
  34. int i;
  35. for(i=1;i<=N;i++){
  36. scanf("%d%d%d",&nowv,&noww,&nowm);
  37. relax(nowv,noww,nowm);
  38. }
  39. }
  40. int main(){
  41. freopen("treasure.in","r",stdin);
  42. freopen("treasure.out","w",stdout);
  43. work();
  44. printf("%d\n",f[W]);
  45. return 0;
  46. }