http://acm.hdu.edu.cn/showproblem.php?pid=2639

01背包第k优解,把每次的max分步列出来即可

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. using namespace std;
  5. struct Node
  6. {
  7. int price;
  8. int val;
  9. }node[];
  10. int main()
  11. {
  12. int T;
  13. scanf("%d",&T);
  14. while(T--)
  15. {
  16. int n,v,k,i,dp[][]={},a[],b[];
  17. scanf("%d%d%d",&n,&v,&k);
  18. for(i=;i<n;i++)
  19. scanf("%d",&node[i].price);
  20. for(i=;i<n;i++)
  21. scanf("%d",&node[i].val);
  22. int j;
  23. for(i=;i<n;i++)
  24. {
  25. for(j=v;j>=node[i].val;j--)
  26. {
  27. int d;
  28. for(d=;d<=k;d++) //每次max分别存入a[]和b[],最后比较相应的次数
  29. {
  30. a[d]=dp[j-node[i].val][d]+node[i].price;
  31. b[d]=dp[j][d];
  32. }
  33. int x,y,z;
  34. x=y=z=;
  35. a[d]=b[d]=-;
  36. while(z<=k&&(x<=k||y<=k))
  37. {
  38. if(a[x]>b[y])
  39. {
  40. dp[j][z]=a[x];
  41. x++;
  42. }
  43. else
  44. {
  45. dp[j][z]=b[y];
  46. y++;
  47. }
  48. if(dp[j][z]!=dp[j][z-])
  49. z++;
  50. }
  51. }
  52. }
  53. printf("%d\n",dp[v][k]);
  54. }
  55. return ;
  56. }

HDU 2639 01背包(分解)的更多相关文章

  1. HDU 2639 01背包求第k大

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  2. Bone Collector II HDU - 2639 01背包第k最大值

    题意: 01背包,找出第k最优解 题解: 对于01背包最优解我们肯定都很熟悉 第k最优解的话也就是在dp方程上加一个维度来存它的第k最优解(dp[i][j]代表,体积为i能获得的第j最大价值) 对于每 ...

  3. HDU 2639(01背包第K大)

    http://acm.hdu.edu.cn/showproblem.php?pid=2639 http://blog.csdn.net/lulipeng_cpp/article/details/758 ...

  4. hdu 1203 01背包 I need a offer

    hdu 1203  01背包  I need a offer 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203 题目大意:给你每个学校得到offe ...

  5. hdu 1864 01背包 最大报销额

    http://acm.hdu.edu.cn/showproblem.php?pid=1864 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...

  6. hdu 2955 01背包

    http://acm.hdu.edu.cn/showproblem.php?pid=2955 如果认为:1-P是背包的容量,n是物品的个数,sum是所有物品的总价值,条件就是装入背包的物品的体积和不能 ...

  7. [HDOJ1171]Big Event in HDU(01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1171 许多有价值的物品,有重复.问如何将他们分成两堆,使两堆价值之差最小. 对价值求和,转换成01背包 ...

  8. HDU 1171 01背包

    http://acm.hdu.edu.cn/showproblem.php?pid=1171 基础的01背包,求出总值sum,背包体积即为sum/2 #include<stdio.h> # ...

  9. HDU 2546 01背包

    http://acm.hdu.edu.cn/showproblem.php?pid=2546 经典的01背包 预留5元买最贵的,剩余的就是01背包. #include<stdio.h> # ...

随机推荐

  1. nowcoder 寻找(LCA)

    这个题貌似是过的最少的? smeow一眼给出了一个单log的算法orz 首先求出x和y的lca, x和c的lca,y和c的lca, 然后分类讨论以下就行了 实际上只有三种情况 #include< ...

  2. 可视化神器--Plotly

    数据分析离不开数据可视化.我们最常用的就是pandas,matplotlib,pyecharts当然还有Tableau,看到一篇文章介绍plotly制图后我也跃跃欲试,查看了相关资料开始学习plotl ...

  3. 【Servlet】(1)Servlet简介、Servlet底层原理、Servlet实现方式、Servlet生命周期

    一.Servlet简介 1.Servlet定义: Servlet(Server Applet)是Java Servlet的简称,是为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交 ...

  4. Visual Studio资源汇总

    Visual Studio 2015:http://tieba.baidu.com/p/3442930798Visual Studio 2013:http://tieba.baidu.com/p/34 ...

  5. css学习2

    1.垂直居中 -父元素高度确定的单行文本: 设置父元素的 height 和 line-height  高度一致来实现的.(height: 该元素的高度:line-height: 行高(行间距),指在文 ...

  6. 利用python的requests发送http请求

    >>> from requests import put, get >>> put('http://localhost:5000/todo1', data={'da ...

  7. springboot整合devtool无法热部署

    参见https://www.cnblogs.com/winner-0715/p/6666579.html.

  8. Codeforces Round #554 (Div. 2)-C(gcd应用)

    题目链接:https://codeforces.com/contest/1152/problem/C 题意:给定a,b(<1e9).求使得lcm(a+k,b+k)最小的k,若有多个k,求最小的k ...

  9. 业务数据实体(model) 需要克隆的方法

    业务数据实体(model) 需要克隆的时候 可以使用 Json.Deserialize<InquireResult>(Json.Serialize<InquireResult> ...

  10. jsonarray根据id排序

    List<JSONObject> jsonValue=new ArrayList<JSONObject>(); JSONArray sortJsonarr=new JSONAr ...