博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷U36590搬书
阅读量:4339 次
发布时间:2019-06-07

本文共 1759 字,大约阅读时间需要 5 分钟。

题目背景

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

题目描述

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

输入输出格式

输入格式:

 

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

 

输出格式:

 

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

 

输入输出样例

输入样例#1: 
2 1 12 9103
输出样例#1: 
67
输入样例#2: 
3 2 42 3 21 59 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
2 #include
3 #include
4 #include
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 }

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/rax-/p/9844461.html

你可能感兴趣的文章
Git(四) - 分支管理
查看>>
PHP Curl发送数据
查看>>
HTTP协议
查看>>
CentOS7 重置root密码
查看>>
Centos安装Python3
查看>>
PHP批量插入
查看>>
laravel连接sql server 2008
查看>>
Ubuntu菜鸟入门(五)—— 一些编程相关工具
查看>>
valgrind检测linux程序内存泄露
查看>>
Hadoop以及组件介绍
查看>>
1020 Tree Traversals (25)(25 point(s))
查看>>
第一次作业
查看>>
“==”运算符与equals()
查看>>
单工、半双工和全双工的定义
查看>>
Hdu【线段树】基础题.cpp
查看>>
时钟系统
查看>>
BiTree
查看>>
5个基于HTML5的加载动画推荐
查看>>
水平权限漏洞的修复方案
查看>>
静态链接与动态链接的区别
查看>>