zoukankan      html  css  js  c++  java
  • 动态规划的引入 P1048 采药【01背包】

    题目

    https://www.luogu.com.cn/problem/P1048

     题目分析

    01背包

    代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int f[1001], v[200], w[200];
    int main()
    {
        int t, m;
        scanf("%d%d", &t, &m);
        for (int i = 1; i <= m; i++)
            scanf("%d%d", &w[i], &v[i]);
        for (int i = 1; i <= m ; i++)
            for (int j = t; j >= w[i]; j--)
                f[j] = max(f[j], f[j - w[i]] + v[i]);
        printf("%d", f[t]);
    }

    注意事项

    f【i】数组的概念是当背包的容量是i的时候能获得的最大价值,所以i的范围是数字t的范围

    for (int i = 1; i <= m ; i++):一共m个物品,我们分别判断每个物品取或者不取的情况

    for (int j = t; j >= w[i]; j--):当背包的容量在w【i】~t的范围才能有选择是不是要装该物品(f[j] = max(f[j], f[j - w[i]] + v[i]);装不装哪个价值大),如果不在该范围的话就一定不能装入

  • 相关阅读:
    053(二十五)
    053(二十四)
    053(二十三)
    053(二十二)
    053(二十一)
    053(二十)
    053(十九)
    053(十八)
    053(十七)
    单例设计模式
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/13121629.html
Copyright © 2011-2022 走看看