zoukankan      html  css  js  c++  java
  • BZOJ 4247 挂饰 01背包

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4247

    JOI君有N个装在手机上的挂饰,编号为1...N。 JOI君可以将其中的一些装在手机上。
    JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他挂件的挂钩。每个挂件要么直接挂在手机上,要么挂在其他挂件的挂钩上。直接挂在手机上的挂件最多有1个。
    此外,每个挂件有一个安装时会获得的喜悦值,用一个整数来表示。如果JOI君很讨厌某个挂饰,那么这个挂饰的喜悦值就是一个负数。
    JOI君想要最大化所有挂饰的喜悦值之和。注意不必要将所有的挂钩都挂上挂饰,而且一个都不挂也是可以的。

    Input

    第一行一个整数N,代表挂饰的个数。
    接下来N行,第i行(1<=i<=N)有两个空格分隔的整数Ai和Bi,表示挂饰i有Ai个挂钩,安装后会获得Bi的喜悦值。 

    Output

    输出一行一个整数,表示手机上连接的挂饰总和的最大值

    Sample Input

    5
    0 4
    2 -2
    1 -1
    0 1
    0 3

    Sample Output

    5
     
    分析:
    状态的定义的确很精巧,d(i,j) 考虑前 i 个物品,还剩 j 个挂钩时的最优解(最大开心值),这不就是01背包了吗? 其实 j 只需要遍历到 n,n 以后的都一样的了。
    还有一个地方要注意的是: 要按照 挂钩数目从大到小排序,不然挂钩数目会被减到负数。
     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 struct Node {
     6     int a,b;
     7 }nodes[2500];
     8 
     9 bool cmp(Node x,Node y) {
    10     return x.a > y.a;
    11 }
    12 int dp[2500][2500];
    13 
    14 int inf = 0x3f3f3f3f;
    15 
    16 int main()
    17 {
    18     int n;
    19     scanf("%d",&n);
    20     memset(dp,-inf,sizeof(dp));
    21     for(int i=1;i<=n;i++)
    22         scanf("%d%d",&nodes[i].a,&nodes[i].b);
    23     sort(nodes+1,nodes+1+n,cmp);
    24     dp[0][1] = 0;
    25     for(int i=1;i<=n;i++) {
    26         for(int j=0;j<=n;j++) {
    27             dp[i][j] = max(dp[i-1][j],dp[i-1][max(j-nodes[i].a,0)+1]+nodes[i].b);
    28         }
    29     }
    30     int ans = 0;
    31     for(int i=0;i<=n;i++)
    32         ans = max(ans,dp[n][i]);
    33     printf("%d
    ",ans);
    34     return 0;
    35 }
    View Code
     
     
     
     
     
  • 相关阅读:
    Vsftpd 3.0.2 正式版发布
    Putdb WebBuilder 6.5 正式版本发布
    SoaBox 1.1.6 GA 发布,SOA 模拟环境
    pynag 0.4.6 发布,Nagios配置和插件管理
    Percona Playback 0.4,MySQL 负荷回放工具
    xombrero 1.3.1 发布,微型 Web 浏览器
    Hypertable 0.9.6.4 发布,分布式数据库
    libmemcached 1.0.11 发布
    CryptoHeaven 3.7 发布,安全邮件解决方案
    Android Activity生命周期
  • 原文地址:https://www.cnblogs.com/TreeDream/p/6551593.html
Copyright © 2011-2022 走看看