当前位置:   article > 正文

动态规划总结(背包模板+状压dp简单入门)_简单动规 dp背包

简单动规 dp背包

一.背包问题:

背包的初始化相关问题:

1.最大价值且恰好装满:dp[0]=0 其他负无穷

2.最小价值且恰好装满:dp[0]=0 其他正无穷

3.不恰好装满:都为0

背包模板:

  1. #include<cstdio>
  2. int main()
  3. {
  4. //W 总重量 n 物品个数 v[i]价值 W[i] 重量
  5. //一维
  6. int dp[MAX],v[MAX],w[MAX];
  7. //01背包问题
  8. for(int i=1;i<=n;i++)
  9. for(int j=W;j>=w[i];j--)
  10. dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
  11. //完全背包问题
  12. for(int i=1;i<=n;i++)
  13. for(int j=w[i];j<=W;j++)
  14. dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
  15. //多重背包 n[i] 个数
  16. void zero(int cost,int val)
  17. {
  18. for(int i=W;i>=cost;i--)
  19. dp[i]=max(dp[i],dp[i-cost])+val;
  20. }
  21. void comple(int cost,int val)
  22. {
  23. for(int i=cost;i<=W;i++)
  24. dp[i]=max(dp[i],dp[i-cost]+val);
  25. }
  26. void muti(int cost,int val,int num)
  27. {
  28. if(cost*num>=W)//num个里面可以凑够W
  29. {
  30. comple(cost,val);
  31. }
  32. else{//否则二进制优化找01背包
  33. int k=1;
  34. while(k<num)
  35. {
  36. zero(k*cost,k*val);
  37. num-=k;
  38. k*=2;
  39. }
  40. zero(num*cost,num*val);
  41. }
  42. }
  43. for(int i=1;i<=n;i++)
  44. muti(w[i],v[i],n[i]);
  45. //分组背包
  46. for(int i=1;i<=k;i++)//k为组数
  47. {
  48. for(int j=W;j>=0;j--)//此时每组只能选一个
  49. {
  50. for(int t=1;t<=n;t++)//每组个数
  51. {
  52. dp[i][j]=max(dp[i][j],dp[i][j-w[t]]+v[t]);//n为每组个数
  53. }
  54. }
  55. }
  56. return 0;
  57. }

二. 状压dp:

1.旅行商问题(TSP):

  1. int dp[(1<<n)][maxn];
  2. int dis[maxn][maxn];
  3. const int inf=0x3f3f3f3f;
  4. void slove()
  5. {
  6. //n表示点的个数
  7. memset(dp,inf,sizeof(dp));
  8. dp[(1<<n)-1][0]=0;//dp[s][v]表示从v出发,访问未访问的点的最短路径和,其中s表示已经访问点的集合
  9. for(int s=(1<<n)-2;s>=0;s--)//每种状态进行枚举
  10. {
  11. for(int v=0;v<n;v++)
  12. {
  13. for(int u=0;u<n;u++)
  14. {
  15. if(!(s&(1<<u)))//u不在s中
  16. {
  17. dp[s][v]=min(dp[s][v],dp[s|(1<<u)][u]+dis[v][u]);
  18. }
  19. }
  20. }
  21. }
  22. printf("%d\n",dp[0][0])//结果为 0出发 所有点均未访问
  23. }

续~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/50810?site
推荐阅读
相关标签
  

闽ICP备14008679号