zoukankan      html  css  js  c++  java
  • 01背包

    有n个物品,每个物品的重量为weight[i],每个物品的价值为value[i]。现在有一个背包,它所能容纳的重量为total,问:当你面对这么多有价值的物品时,你的背包所能带走的最大价值是多少?

    题解:关键在于状态方程。

    代码:

     1 #include<stdio.h>
     2 #define MAX 1000
     3 int max(int a,int b)
     4 {
     5     return a>b?a:b;
     6 }
     7 int main()
     8 {
     9     int n,m,w[MAX],v[MAX],i,j,dp[MAX];  
    10     printf("背包容量:");
    11     scanf("%d",&m);
    12     printf("物品个数:");
    13     scanf("%d",&n);
    14     printf("每个物品的重量和价值:
    ");
    15     for(i=1;i<=n;i++)
    16         scanf("%d%d",&w[i],&v[i]);
    17     for(i=1;i<=n;i++)
    18         for(j=m;j>=w[i];j--)
    19             dp[j]=max(dp[j],v[i]+dp[j-w[i]]);     //dp[j]表示重量为j的背包中所装物品的最大价值(dp数组元素的值表示价值,下标j表示重量)
    20     printf("最大价值为:%d
    ",dp[m]);
    21     return 0;
    22 }
  • 相关阅读:
    vim使用基础
    linux基本命令随笔
    linux学习笔记
    中台建设随笔
    数据密集型系统响应优化
    TCP断开连接的问题
    多渠道接入系统总结
    关于实践的认识
    博客说明
    python下载图片的问题思考
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/4419213.html
Copyright © 2011-2022 走看看