zoukankan      html  css  js  c++  java
  • 洛谷U36590搬书

    题目背景

    陈老师喜欢网购书籍,经常一次购它个百八十本,然后拿来倒卖,牟取暴利。前些天,高一的新同学来了,他便像往常一样,兜售他的书,经过一番口舌,同学们决定买他的书,但是陈老师桌上的书有三堆,每一堆都有厚厚的一叠,他要想个办法用最轻松的方式把书拿下来给同学们.但是你想逗一下陈老师,于是,请你设计一个最累的方式给他.

    题目描述

    若告诉你这三堆分别有i,j,k本书,以及每堆从下到上书的重量.每次取书只能从任意一堆的最上面取,那么请你帮助他设计一个方案,让他花最大的力气取下所有书(陈老师别打我). 显然,每次取书,陈老师的体力消耗都会加大,这里用体力系数代表,取下第一本书时,体力系数为1,第二本时为2,依次类推,而每次体力消耗值则为体力系数和书的重量之积。

    输入输出格式

    输入格式:

     

    输入文件的第一行为3个数,分别为三堆数量I,j,k 第二行至第四行分别为每堆由下至上的书本重量

     

    输出格式:

     

    输出最累方式的体力消耗总值即可

     

    输入输出样例

    输入样例#1: 复制
    2 1 1
    2 9
    10
    3
    输出样例#1: 复制
    67
    输入样例#2: 复制
    3 2 4
    2 3 2
    1 5
    9 8 7 4	
    输出样例#2: 复制
    257

    说明

    对于40%的数据有:0<=i<10 0<=j<10 0<=k<10

    对于100%的数据有:0<=i<100 0<=j<100 0<=k<100

    最后输出的体力消耗总值在longint范围内

    ******本来是贪心的例题,但是其实贪心并不是正解,而正解应该是动态规划,i代表的是第一堆里面拿出来的书数

    j代表第二堆里面拿出来的书数,k代表第三堆里面拿出来的书数

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<cmath>
     5 using namespace std;
     6 int i,j,k,n,m,q,a[105][105][105],b[105],c[105],d[105];
     7 int main()
     8 {
     9     scanf("%d %d %d",&n,&m,&q);
    10     for(i = n;i>= 1;i--)
    11     {
    12         scanf("%d",&b[i]);
    13     }
    14     for(i = m;i >= 1;i--)
    15     {
    16         scanf("%d",&c[i]);
    17     }
    18     for(i = q;i >= 1;i--)
    19     {
    20         scanf("%d",&d[i]);
    21     }
    22     for(i = 0;i <= n;i++)
    23     {
    24         for(j = 0;j <= m;j++)
    25         {
    26             for(k = 0;k <= q;k++)
    27             {
    28                 if(i >= 1)
    29                 a[i][j][k] = max(a[i][j][k],a[i - 1][j][k] + b[i] * (i + j + k));
    30                 if(j >= 1)
    31                 a[i][j][k] = max(a[i][j][k],a[i][j - 1][k] + c[j] * (i + j + k));
    32                 if(k >= 1)
    33                 a[i][j][k] = max(a[i][j][k],a[i][j][k - 1] + d[k] * (i + j + k));
    34             }
    35         }
    36     }
    37     printf("%d",a[n][m][q]);
    38     return 0;
    39 }

     

     

  • 相关阅读:
    调整数组顺序使奇数位于偶数前面
    数值的整数次方
    矩形覆盖
    变态跳台阶
    跳台阶
    ubuntu图形界面切换文字界面(文字界面切换图形界面)
    Django环境安装、虚拟机端口映射、pycharm远程配置
    sql注入(一)-----数字型
    mysql基本语法
    渗透测试之------信息收集
  • 原文地址:https://www.cnblogs.com/rax-/p/9844461.html
Copyright © 2011-2022 走看看