zoukankan      html  css  js  c++  java
  • HDU 3602 2012【01 背包变形】

    题意: 有 n 个团队和 m 艘船,每艘船的载客量为 k,每个团队的人数为ai+1 ,转载该团队可获利润 bi,要求每个团队的所有人必须在同一艘船上,

            且团队优先级高的团队所在船编号不能大于优先级低的团队,求可以获得的最大利润。

    题解:其实没什么,只需要01背包就可以了,只不过优先考虑团队优先级高的。
    分析:dp[i] 表示获得 i 利润时需要的最少船位,且要保证优先级高的团队优先考虑。

     1 #include<cstdio>
     2 #include<cmath>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<cstring>
     6 
     7 #define INF 0x1f1f1f1f
     8 #define v 10005
     9 
    10 int min(int a,int b)
    11 {
    12     return a<b?a:b;
    13 }
    14 int dp[v+1];
    15 int n,m,k;
    16 int cal(int num,int a)
    17 {
    18     int tot=(num+k-1)/k;
    19     if(num+a<=tot*k)
    20         return num+a;
    21     return tot*k+a;
    22 }
    23 int main()
    24 {
    25     int Cas;
    26     scanf("%d",&Cas);
    27     while(Cas--)
    28     {
    29         scanf("%d%d%d",&n,&m,&k);
    30         memset(dp,INF,sizeof(dp));
    31         int a,b;
    32         dp[0]=0;
    33         while(n--)
    34         {
    35             scanf("%d %d",&a, &b);
    36             a++;
    37             for(int i=v-1; i>=b; i--)
    38                 if(dp[i-b]!=INF)
    39                     dp[i]=min(dp[i],cal(dp[i-b],a));
    40         }
    41         int i;
    42         for(i=v; i>=0; i--)
    43             if(dp[i]<m*k) break;
    44         printf("%d
    ",i);
    45     }
    46 }
  • 相关阅读:
    Android 目前最稳定和高效的UI适配方案
    很值得收藏的安卓开源控件库
    django-初始配置(纯手写)
    面向对象 继承
    wsgiref手写一个web服务端
    socket手写一个简单的web服务端
    vue指令
    vue入门
    python中and,or
    面向对象三大特性-继承
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/7747633.html
Copyright © 2011-2022 走看看