zoukankan      html  css  js  c++  java
  • 背包路径

    以 UVA 624 CD 为例,题为简单的01背包,重点看路径的记录部分。

    代码1:

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<vector>
    using namespace std;
    const int maxn=100010;
    int dp[maxn],path[maxn],ans[maxn],w[maxn];
    int main()
    {
      int V,n,i,j,cnt;
      while(~scanf("%d",&V))
      {
        {
         cnt=0;
         fill(path,path+maxn,-1);
         fill(dp,dp+maxn,0);
        }
        scanf("%d",&n);
        for(i=1;i<=n;i++) scanf("%d",&w[i]);
        for(i=1;i<=n;i++)
        {
          for(j=V;j>=w[i];j--)
           {
             if(dp[j]<dp[j-w[i]]+w[i])
              {
                dp[j]=dp[j-w[i]]+w[i];
                path[j]=i;
              }
           }
        }
        i=dp[V];
        while(i>0)
        {
          ans[cnt++]=w[path[i]];
          i-=w[path[i]];
        }
        for(i=cnt-1;i>=0;i--)printf("%d ",ans[i]);
        printf("sum:%d
    ",dp[V]);
      }
      return 0;
    }

    代码2:

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<vector>
    using namespace std;
    const int maxn=10000;
    int dp[maxn],path[25][maxn],ans[maxn],w[maxn];
    int main()
    {
      int V,n,i,j,cnt;
      while(~scanf("%d",&V))
      {
        {
         cnt=0;
         fill(path[0],path[0]+maxn*25,0);
         fill(dp,dp+maxn,0);
        }
        scanf("%d",&n);
        for(i=1;i<=n;i++) scanf("%d",&w[i]);
        for(i=1;i<=n;i++)
        {
          for(j=V;j>=w[i];j--)
           {
             if(dp[j]<dp[j-w[i]]+w[i])
              {
                dp[j]=dp[j-w[i]]+w[i];
                path[i][j]=1;
              }
           }
        }
        j=V;
        for(i=n;i>=1;i--)
        {
          if(path[i][j])
          {
            ans[cnt++]=w[i];
            j-=w[i] ;
          } 
        }
        for(i=cnt-1;i>=0;i--)printf("%d ",ans[i]);
        printf("sum:%d
    ",dp[V]);
      }
      return 0;
    }
    本博客仅为本人学习,总结,归纳,交流所用,若文章中存在错误或有不当之处,十分抱歉,劳烦指出,不胜感激!!!
  • 相关阅读:
    474 Ones and Zeroes 一和零
    473 Matchsticks to Square 火柴拼正方形
    472 Concatenated Words 连接的单词
    Django 视图系统
    Django 路由系统
    Django 框架基础
    jQuery
    JavaScript- BOM, DOM
    CSS概念,引入,选择器
    HTML
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/11366691.html
Copyright © 2011-2022 走看看