【u227】BOOK
来源:互联网 发布:斑马梦龙网络计划心得 编辑:程序博客网 时间:2024/06/05 14:07
Time Limit: 1 second
Memory Limit: 128 MB
【问题描述】
陈老师喜欢网购书籍,经常一次购它个百八十本,然后拿来倒卖,牟取暴利。前些天,高一的新同学来了,他便像往常一样,兜售他的书,经过一番口舌,同学们决定买他的书,但是CS桌上的书有三堆,每一堆都有厚厚的一叠,他要想个办法用最轻松的方式把书拿下来给同学们.但是你想逗一下CS,于是,请你设计一个最累的方式给他.
若告诉你这三堆分别有i,j,k本书,以及每堆从下到上书的重量.每次取书只能从任意一堆的最上面取,那么请你帮助他设计一个方案,让他花最大的力气取下所有书(CS别打我).
显然,每次取书,陈老师的体力消耗都会加大,这里用体力系数代表,取下第一本书时,体力系数为1,第二本时为2,依次类推,而每次体力消耗值则为体力系数和书的重量之积。
举个例子:
三堆书及重量如下
不用证明,最累的取书方式为: 右左左中, 即: 3*1+9*2+2*3+10*4=3+18+6+40=67
【输入文件】(book.in)
输入文件的第一行为3个数,分别为三堆数量I,j,k
第二行至第四行分别为每堆由下至上的书本重量
【输出文件】(book.out)
输出最累方式的体力消耗总值即可
【输入样例】
3 2 4
2 3 2
1 5
9 8 7 4
【输出样例】
257
【注释】:
输入数据为每堆由下至上的书本重量!
【数据规模】
对于40%的数据有:0<=i<10 0<=j<10 0<=k<10
对于100%的数据有:0<=i<100 0<=j<100 0<=k<100
最后输出的体力消耗总值在longint范围内
【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u227
【题解】
/* 设f[x1][x2][x3]表示第一堆取了x1本,第二堆取了x2本,第3堆取了x3本的最大花费; t = x1+x2+x3; f[x1][x2][x3] = max(f[x1-1][x2][x3]+a[1][x1]*t, f[i-1][x1][x2-1][x3]+a[2][x2]*t ,f[i-1][x1][x2][x3-1]+a[3][x3]*t); 时间复杂度O(N^2); */
【完整代码】
#include <cstdio>#include <algorithm>#include <cmath>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define LL long long#define rep1(i,a,b) for (int i = a;i <= b;i++)#define rep2(i,a,b) for (int i = a;i >= b;i--)#define mp make_pair#define pb push_back#define fi first#define se second#define rei(x) scanf("%d",&x)#define rel(x) scanf("%I64d",&x)typedef pair<int,int> pii;typedef pair<LL,LL> pll;const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};const double pi = acos(-1.0);const int MAXN = 110;int f[MAXN][MAXN][MAXN],a[4][MAXN];int n1,n2,n3;int main(){ //freopen("F:\\rush.txt","r",stdin); rei(n1);rei(n2);rei(n3); rep2(i,n1,1) rei(a[1][i]); rep2(i,n2,1) rei(a[2][i]); rep2(i,n3,1) rei(a[3][i]); rep1(x1,0,n1) rep1(x2,0,n2) rep1(x3,0,n3) { int i = x1+x2+x3; if (x1>=1) f[x1][x2][x3] = max(f[x1][x2][x3],f[x1-1][x2][x3]+a[1][x1]*i); if (x2>=1) f[x1][x2][x3] = max(f[x1][x2][x3],f[x1][x2-1][x3]+a[2][x2]*i); if (x3>=1) f[x1][x2][x3] = max(f[x1][x2][x3],f[x1][x2][x3-1]+a[3][x3]*i); } printf("%d\n",f[n1][n2][n3]); return 0;}
- 【u227】BOOK
- book
- book
- book
- book
- book
- Book
- book
- Book
- book
- BOOK
- book
- book
- book
- Book
- BOOK
- book
- book
- Win7系统使用--Win7无法连接wifi问题的解决方法
- nth-child和nth-of-type的区别
- HP打印机驱动程序下载
- Bigtable的些许重点
- c++异常积累
- 【u227】BOOK
- 蓝桥杯搭积木问题DFS
- 八种常用的排序方法
- LINUX下的51单片机LED 渐亮渐灭实验
- ID Codes POJ - 1146
- 如何用VPS搭建一个属于自己的网站(一)
- 【Java笔记】super 关键字
- 哥德尔-----------------
- yum提示another app is currently holding the yum lock;waiting for it to exit