zoukankan      html  css  js  c++  java
  • hdu3466 Proud Merchants(01背包)

    https://vjudge.net/problem/HDU-3466

    一开始想到了是个排序后的背包,但是排序的策略一直没对。

    两个物品1和2,当p1+q2>p2+q1 => q1-p1<q2-p2时选1.

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cstdlib>
     6 #include<cmath> 
     7 #define lson l, m, rt<<1
     8 #define rson m+1, r, rt<<1|1
     9 #define IO ios::sync_with_stdio(false);cin.tie(0);
    10 #define INF 1e9
    11 typedef long long ll;
    12 using namespace std;
    13 typedef struct{
    14     int p, q, v;
    15     int x;
    16 }Node;
    17 Node node[100010]; 
    18 int m, n, dp[100010];
    19 bool cmp(const Node a, const Node b)
    20 {
    21     return a.x<b.x;
    22 }
    23 int main()
    24 {
    25     IO;
    26     while(cin >> n >> m){
    27         memset(dp, 0, sizeof(dp));
    28         for(int i = 0; i < n; i++){
    29             cin >> node[i].p >> node[i].q >> node[i].v;
    30             node[i].x = node[i].q-node[i].p;//p1+q2>p2+q1 => q1-p1<q2-p2
    31         }
    32         sort(node, node+n, cmp);
    33         for(int i = 0; i < n; i++){
    34             for(int j = m; j >= node[i].p; j--){
    35                 if(j >= node[i].q)
    36                     dp[j] = max(dp[j], dp[j-node[i].p]+node[i].v);
    37             }
    38         }
    39         cout << dp[m] << endl;
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    viewpager切换时底下的背景图标动画切换
    hdu 1594水题
    hdu 4256大水题
    hdu 1856并查集
    hdu4247水题
    hdu 4252单调栈
    hdu 4248排列问题
    hdu 1210
    hdu4245
    hdu 1593找规律题
  • 原文地址:https://www.cnblogs.com/Surprisezang/p/8892848.html
Copyright © 2011-2022 走看看