zoukankan      html  css  js  c++  java
  • SSL 1639——机器分配

    Description

      总公司拥有高效生产设备M台,准备分给下属的N个公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M《=15,N〈=10。分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总设备数M。

    Input

    第一行保存两个数,第一个数是设备台数M,第二个数是分公司数N。接下来是一个M*N的矩阵,表明了第I个公司分配J台机器的盈利。

    Output

    最大盈利

    Sample Input

    15 10
    36 67 86 8 82 88 1 96 75 82
    107 68 136 105 99 104 61 176 127 133
    184 120 223 179 198 134 113 247 225 205
    283 136 273 217 249 140 117 312 296 205
    286 207 315 306 291 224 209 346 370 272
    292 279 317 332 372 227 223 375 370 295
    361 327 363 373 453 277 286 410 463 316
    393 413 369 387 542 302 289 419 473 393
    425 443 455 407 561 358 336 477 491 445
    469 521 554 478 589 440 364 572 537 512
    475 534 570 520 603 530 405 574 602 593
    496 542 591 547 654 587 431 587 664 637
    577 632 657 645 700 635 527 620 680 680
    656 643 670 670 730 715 573 676 721 707
    713 719 685 685 757 770 642 744 728 745
    Sample Output

    1167


    设f[i,j]为前i个公司分配j台机器的最大价值
    f[i,j]:=max(f[i,j],f[i-1,k]+a[i,j-k]);
    1<=i<=n
    1<=j<=m
    0<=k<=j


    代码如下:

    var   n,m,i,j,k:longint;
          a,f:array[0..100,0..100]of longint;
    
    function max(a,b:longint):longint;
    begin
      if a>b then exit(a) else exit(b);
    end;
    
    begin
      readln(m,n);
      for i:=1 to m do
        begin
          for j:=1 to n do read(a[j,i]);
          readln;
        end;
      fillchar(f,sizeof(f),#0);
      for i:=1 to n do
        for j:=1 to m do
          for k:=0 to j do
            if f[i-1,k]+a[i,j-k]>f[i,j] then
              f[i,j]:=a[i,j-k]+f[i-1,k];
      write(f[n,m]);
    end.
  • 相关阅读:
    C++继承 派生类中的内存布局(单继承、多继承、虚拟继承)
    Linux 共享库(动态库)
    虚幻4
    从头认识java-16.5 nio的数据转换
    JavaScript实现禁用键盘和鼠标的点击事件
    Codeforces Round #277.5 (Div. 2)部分题解
    iOS-WKWebView使用
    我学cocos2d-x (三) Node:一切可视化对象的祖先
    Android Studio右下角不显示当前branch名称
    Neo4j简单的样例
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412380.html
Copyright © 2011-2022 走看看