zoukankan      html  css  js  c++  java
  • BZOJ【1625】宝石手镯

    1625: [Usaco2007 Dec]宝石手镯

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 1007  Solved: 684
    [Submit][Status][Discuss]

    Description

    贝茜在珠宝店闲逛时,买到了一个中意的手镯。很自然地,她想从她收集的 N(1 <= N <= 3,402)块宝石中选出最好的那些镶在手镯上。对于第i块宝石,它的重量为W_i(1 <= W_i <= 400),并且贝茜知道它在镶上手镯后能为自己增加的魅力值D_i(1 <= D_i <= 100)。由于贝茜只能忍受重量不超过M(1 <= M <= 12,880)的手镯,她可能无法把所有喜欢的宝石都镶上。 于是贝茜找到了你,告诉了你她所有宝石的属性以及她能忍受的重量,希望你能帮她计算一下,按照最合理的方案镶嵌宝石的话,她的魅力值最多能增加多少。

    Input

    * 第1行: 2个用空格隔开的整数:N 和 M

    * 第2..N+1行: 第i+1行为2个用空格隔开的整数:W_i、D_i,分别为第i块宝石 的重量与能为贝茜增加的魅力值

    Output

    * 第1行: 输出1个整数,表示按照镶嵌要求,贝茜最多能增加的魅力值

    Sample Input

    4 6
    1 4
    2 6
    3 12
    2 7

    输入说明:

    贝茜收集了4块宝石,她能忍受重量最大为6的手镯。


    Sample Output

    23

    输出说明:

    贝茜把除了第二块宝石的其余所有宝石都镶上手镯,这样她能增加
    4+12+7=23的魅力值,并且所有宝石的重量为1+2+3 <= 6,同样符合要求。

    HINT

     

    Source

    Silver

    01背包。采药,小飞侠?

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #define maxn 100000+100 
    int f[maxn];
    using namespace std;
    int main()
    {
        int n,m,x,y;
        memset(f,0,sizeof(f));
        cin>>n>>m;
        for(int i=1;i<=n;++i)
        {
            scanf("%d%d",&x,&y);
            for(int j=m;j>=x;j--)
              if(f[j]<f[j-x]+y) f[j]=f[j-x]+y;
        }
        cout<<f[m];
        return 0;
     } 
    View Code
  • 相关阅读:
    NYOJ 10 skiing DFS+DP
    51nod 1270 数组的最大代价
    HDU 4635 Strongly connected
    HDU 4612 Warm up
    POJ 3177 Redundant Paths
    HDU 1629 迷宫城堡
    uva 796
    uva 315
    POJ 3180 The Cow Prom
    POJ 1236 Network of Schools
  • 原文地址:https://www.cnblogs.com/TYH-TYH/p/4874153.html
Copyright © 2011-2022 走看看