题目 【#|2017年蓝桥杯省赛-承压计算】题目链接
题解 动态规划。
f[i][j]
表示第i
行第j
列承受的重量(含第i
行第j
列物品的重量)
转移方程:f[i][j] = f[i-1][j]/2 + f[i-1][j-1]/2
,即左肩物品重量的一半+右肩物品重量的一半+自身重量,如果左肩或右肩没有物品,则相当于扛着重量为0的物品。
最后根据比例算出最重称重显示多少即可。
又是思考如何处理浮点数想了半天,最后发现只要改个double就行。
代码
7
5 8
7 8 8
9 2 7 2
8 1 4 9 1
8 1 8 8 4 1
7 9 6 1 4 5 4
5 6 5 5 6 9 5 6
5 5 4 7 9 3 5 5 1
7 5 7 9 7 4 7 3 3 1
4 6 4 5 5 8 8 3 2 4 3
1 1 3 3 1 6 6 5 5 4 4 2
9 9 9 2 1 9 1 9 2 9 5 7 9
4 3 3 7 7 9 3 6 1 3 8 8 3 7
3 6 8 1 5 3 9 5 8 3 8 1 8 3 3
8 3 2 3 3 5 5 8 5 4 2 8 6 7 6 9
8 1 8 1 8 4 6 2 2 1 7 9 4 2 3 3 4
2 8 4 2 2 9 9 2 8 3 4 9 6 3 9 4 6 9
7 9 7 4 9 7 6 6 2 8 9 4 1 8 1 7 2 1 6
9 2 8 6 4 2 7 9 5 4 1 2 5 1 7 3 9 8 3 3
5 2 1 6 7 9 3 2 8 9 5 5 6 6 6 2 1 8 7 9 9
6 7 1 8 8 7 5 3 6 5 4 7 3 4 6 7 8 1 3 2 7 4
2 2 6 3 5 3 4 9 2 4 5 7 6 6 3 2 7 2 4 8 5 5 4
7 4 4 5 8 3 3 8 1 8 6 3 2 1 6 2 6 4 6 3 8 2 9 6
1 2 4 1 3 3 5 3 4 9 6 3 8 6 5 9 1 5 3 2 6 8 8 5 3
2 2 7 9 3 3 2 8 6 9 8 4 4 9 5 8 2 6 3 4 8 4 9 3 8 8
7 7 7 9 7 5 2 7 9 2 5 1 9 2 6 5 3 9 3 5 7 3 5 4 2 8 9
7 7 6 6 8 7 5 5 8 2 4 7 7 4 7 2 6 9 2 1 8 2 9 8 5 7 3 6
5 9 4 5 5 7 5 5 6 3 5 3 9 5 8 9 5 4 1 2 6 1 4 3 5 3 2 4 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#include
using namespace std;
typedef unsigned long long LL;
const int N = 30;
const double MIN = 2086458231;
double f[N][N], mx = 0, mn = 1e9;
int main()
{
for (int i = 1;
i <= N;
i ++)
for (int j = 1;
j <= i;
j ++) {
cin >> f[i][j];
f[i][j] += f[i-1][j-1]/2 + f[i-1][j]/2;
}
for (int j = 1;
j <= N;
j ++) {
mx = max (mx, f[N][j]);
mn = min (mn, f[N][j]);
}
LL ans = (MIN / mn * mx);
cout << ans << endl;
return 0;
}
推荐阅读
- 蓝桥杯|2017年蓝桥杯省赛B组C++真题
- 蓝桥杯|2017年蓝桥杯省赛B组Java真题
- 2017年蓝桥杯省赛包子凑数
- 蓝桥杯真题|2017年蓝桥杯C/C++ B组省赛题目汇总及部分题解
- 科创项目|计算机设计大赛国奖作品_1. 项目概要
- 大话设计模式|大话设计模式 —— 第二章《策略模式》C++ 代码实现
- 算法刷题|LeetCode刷题笔记-21.合并两个有序链表
- python|第一篇博客,与您共勉
- 蓝桥杯|蓝桥杯python(题目思路即解答(笔记,持续更新))