zoukankan      html  css  js  c++  java
  • 优化后的01背包模板

    Charm Bracelet
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 40141   Accepted: 17439

    Description

    Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. Each charm i in the supplied list has a weight Wi (1 ≤ Wi ≤ 400), a 'desirability' factor Di (1 ≤ Di ≤ 100), and can be used at most once. Bessie can only support a charm bracelet whose weight is no more than M (1 ≤ M ≤ 12,880).

    Given that weight limit as a constraint and a list of the charms with their weights and desirability rating, deduce the maximum possible sum of ratings.

    Input

    * Line 1: Two space-separated integers: N and M
    * Lines 2..N+1: Line i+1 describes charm i with two space-separated integers: Wi and Di

    Output

    * Line 1: A single integer that is the greatest sum of charm desirabilities that can be achieved given the weight constraints

    Sample Input

    4 6
    1 4
    2 6
    3 12
    2 7

    Sample Output

    23
    二维优化为一维,因为将01背包逐行输出后,发现前面的值对后面有影响,因此从后往前处理
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <cmath>
    #include <vector>
    #include <algorithm>
    using namespace std;
    #define lowbit(x) (x&(-x))
    #define max(x,y) (x>y?x:y)
    #define min(x,y) (x<y?x:y)
    #define MAX 100000000000000000
    #define MOD 1000000007
    #define PI 3.141592653589793238462
    #define INF 1000000000
    #define mem(a) (memset(a,0,sizeof(a)))
    typedef long long ll;
    ll dp[13000];
    ll x,y;
    ll n,v;
    int main()
    {
        scanf("%lld%lld",&n,&v);
        mem(dp);
        for(int i=1;i<=n;i++)
        {
            scanf("%lld%lld",&x,&y);
            for(int j=v;j>=0;j--)
            {
                dp[j]=dp[j];
                if(j-x>=0) dp[j]=max(dp[j],dp[j-x]+y);
            }
        }
        printf("%lld
    ",dp[v]);
        return 0;
    }
  • 相关阅读:
    MYSQL一对多,两表查询合并数据
    bootstrap瀑布流代码
    os mac apache+php+mysql环境配置
    centos 6.5 服务器安装 (LNMP ntfs文件支持 PHP-RPM CHROOT沙盒)
    在linux下将当前目录文件全部小写含目录名
    Javascript知识汇总------js中容易被忽略的细节(持续更新)
    Javascript知识汇总------js数据类型隐式转换
    下次要写约瑟夫和并查集
    --wrong answer
    --最小生成树
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7192904.html
Copyright © 2011-2022 走看看