zoukankan      html  css  js  c++  java
  • P1616 疯狂的采药 (完全背包优化)

    (点击此处查看原题)

    题意

    简单来说,就是一个完全背包,不过这里卡住了常规的完全背包写法,时间复杂度为O( V*∑( V/c[i] ))如下所示:

    for(int i = 1;i <= n ;i ++)
        {
            scanf("%d%d",cost+i,val+i);
            for(int j = t; j >= cost[i] ; j --)
            {
                for(int k = 1; k * cost[i] <= j ;k ++)
                {
                    dp[j] = max(dp[j],dp[j-k*cost[i]] + k * val[i]);
                }
            }
        }

    解题思路

    既然普通的写法无法解决,那就采用如下的优化即可,时间复杂度为O(NV),题目满足N*T <= 1e7,因此可以跑过去:

    for(int i = 1;i <= n ;i ++)
        {
            scanf("%d%d",cost+i,val+i);
            for(int j = cost[i]; j <= t; j ++)
            {
                dp[j] = max(dp[j],dp[j-cost[i]] + val[i]);
            }
        }

    代码区

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    #include<string>
    #include<fstream>
    #include<vector>
    #include<stack>
    #include <map>
    #include <iomanip>
    
    #define bug cout << "**********" << endl
    #define show(x, y) cout<<"["<<x<<","<<y<<"] "
    #define LOCAL = 1;
    using namespace std;
    typedef long long ll;
    const int inf = 1e9 + 7;
    const ll mod = 1e9 + 7;
    const int Max = 1e5 + 10;
    
    int t, n;
    int cost[Max],val[Max];
    int dp[Max];            //记录价格为i的时候的最大价值
    
    int main()
    {
    #ifdef LOCAL
        //    freopen("input.txt", "r", stdin);
        //    freopen("output.txt", "w", stdout);
    #endif
        scanf("%d%d",&t,&n);
        memset(dp,0,sizeof(dp));
        for(int i = 1;i <= n ;i ++)
        {
            scanf("%d%d",cost+i,val+i);
            for(int j = cost[i]; j <= t; j ++)
            {
                dp[j] = max(dp[j],dp[j-cost[i]] + val[i]);
            }
        }
        printf("%d
    ",dp[t]);
        return 0;
    }
  • 相关阅读:
    java 可伸缩阻塞队列实现
    java mysql大数据量批量插入与流式读取分析
    innodb next-key lock引发的死锁
    jremoting的功能扩展点
    java开源项目jremoting
    Linux下搭建gtk+2.0开发环境
    《程序员的办公室日常》第二回 拜师
    《程序员的办公室日常》第一回 相识
    【限时免费】近1000G JAVA学习视频下载
    裁员之后,我才明白它的重要性
  • 原文地址:https://www.cnblogs.com/winter-bamboo/p/11453271.html
Copyright © 2011-2022 走看看