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;
    }
  • 相关阅读:
    The Tower of Hanoi
    POJ 3259:Wormholes
    第二数学归纳法
    Josephus Problem
    想成为Java高手的25个学习目标
    How to find a cycle of length 4?
    Fabonacci Numbers
    通过参数离线安装SharePoint 2010[转]
    Sharepoint2010文档库权限问题
    BizTalk 2010 学习笔记——第一章 BizTalk 2010 概述
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7192904.html
Copyright © 2011-2022 走看看