接苹果(附程序)

orz什么意思2023-05-07  13

本题的算法是动态规划,这里面f是一个滚动数组。如果不滚动的话,f[i,j]表示到第i分钟为止,Bessy恰移动j次所能接到的最多的苹果数。状态转移方程为:

f[0,j]=0

f[i,0]=f[i-1,0]+第i分钟1号树是否掉下苹果

f[i,j]=max { f[i-1,j-1], f[i-1,j] } + 第i分钟时Bessy所站的树是否掉下苹果(大括号里的两项分别对应“动”和“不动”两种决策)

程序里两重循环里那个比较费解的p就是计算第i分钟时Bessy移动j次后所站的树是否掉下苹果。首先读入p并将之减1,结果就是1号树改为0号,2号树改为1号。而移动j次后Bessy所站的树的新号码就是j mod 2,如果它与读入的掉苹果的树的编号相同,则苹果是从Bessy所站的树上掉下来的,否则是从另一棵树上掉下来的。

数学离散数学集合论 关系 代数系统 数理逻辑 图论

组合数学排列组合 母函数 群论 递推与递归 莫比乌斯反演

数学线性规划 动态 整数

高等数学向量 行列式与矩阵 微积分初步

概率统计

初等数论素数 整数理论 同余与模线性方程

计算几何

数据结构存储结构线性表

(一级结构)静态:数组 栈 队列 广义表 字符串

动态:指针链表 动态数组

(二级结构)表示法(静态、动态) 二叉树 森林

(三级结构)表示法(矩阵、邻接表、三元组)

特殊结构散列表(HASH表) 并查集 线段树 后缀树 哈夫曼树与哈夫曼编码 地址表Bit图 滚动数组 棋盘图 边顶置换图 二分点图(网络流)

常用方法遍历树 图 前/中/后序优先

转化拓扑排序(三级结构转一级结构) 最小生成树 最小树形图(三级结构转二级结构) 逆遍历

压缩路径树的线索化

压缩存储

查找线性直接 折半Fab

树形二叉查找树 平衡二叉树B+树B-树 线索二叉树索引表

排序插入排序直接排序、折半排序、2-路排序

交换排序冒泡排序 快速排序 归并排序

堆排序

基数排序链式基数排序 桶排序

代码素养代码的编写速度和准确性 误码率

算法实现

算法优化

调试 查错 测试

习惯变量名 注释 缩进 模块化

基本算法数学高精度计算(模拟计算)

表达式处理括号 前/中/后缀表达式 表达式树

排列组合求值 嵌套控制

高斯消元法

快速傅里叶变换(FFT)

筛选素数素数表

分数处理

基本操作实现大量数据赋值与移动Fillchar fillword move等函数

处理实数比较大小 高精度

字符串处理基本函数KMP算法

图论

(显示图搜索)路径问题

(边集)连通性测试传递闭包算法 极大强连通子图 最小点基

最短路问题标号法 第k小路 减半最短路Dijkstra算法floyd算法bellman-ford算法Warshall算法

特殊路径欧拉路及回路 哈密尔顿路及回路

图的中心和重心

生成树Kruskal算法Prim算法

(顶点集)覆盖集

独立集

支配集

割顶和块

网络流容量有上下界的网络最大/ 小流

容量有上下界的网络最小费用最大/ 小流

顶容量网络最大流

供求约束可行流

二分图匹配匈牙利算法

关键路径

搜索

(隐式图搜索)深度优先搜索

(回溯法)剪枝优化

预处理

记忆化搜索

可变下界的深度优先搜索

随机化搜索

广度优先搜索双向广搜多向广搜

启发式搜索(A算法)

分枝定界

多阶段决策贪心算法

背包动态规划

棋盘动态规划

划分动态规划

区间动态规划

树形动态规划

状态压缩型动态规划

其他构造法穷举

模拟

假设S是一百的数组 使用S[m mod 100]就可以了 这样在m递增的过程中s就可以滚动使用了

From zhouguyue

搭建双塔

描述 Description

2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr F曾亲眼目睹了这次灾难。为了纪念“911”事件,Mr F决定自己用水晶来搭建一座双塔。

Mr F有N块水晶,每块水晶有一个高度,他想用这N块水晶搭建两座有同样高度的塔,使他们成为一座双塔,Mr F可以从这N块水晶中任取M(1≤M≤N)块来搭建。但是他不知道能否使两座塔有同样的高度,也不知道如果能搭建成一座双塔,这座双塔的最大高度是多少。所以他来请你帮忙。

给定水晶的数量N(1≤N≤100)和每块水晶的高度Hi(N块水晶高度的总和不超过2000),你的任务是判断Mr F能否用这些水晶搭建成一座双塔(两座塔有同样的高度),如果能,则输出所能搭建的双塔的最大高度,否则输出“Impossible”。

输入:

5

1 3 4 5 2

输出:

7

程序:

program mm;

var

a,sum:array[0103] of longint;

f:array[0103,02030] of longint;

i,j,k,l,m,n,x,y,z:longint;

function max(a,b,c:longint):longint;

begin

max:=a;

if b>max then max:=b;

if c>max then max:=c;

end;

begin

fillchar(a,sizeof(a),0);

fillchar(f,sizeof(f),$F0);

readln(n);

for i:=1 to n do

read(a[i]);

f[0,0]:=0;

for i:=1 to n do

sum[i]:=sum[i-1]+a[i];

for i:=1 to n do

for j:=0 to sum[n] do begin

if a[i]<=j

then f[i,j]:=max(f[i-1,j],f[i-1,j-a[i]],f[i-1,j+a[i]]+a[i])

else f[i,j]:=max(f[i-1,j],f[i-1,a[i]-j]+a[i]-j,f[i-1,j+a[i]]+a[i]);

end;

if f[n,0]>0

then writeln(f[n,0])

else writeln('Impossible');

end

以上就是关于接苹果(附程序)全部的内容,包括:接苹果(附程序)、oier的知识能力体系、关于pascal的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

转载请注明原文地址:https://juke.outofmemory.cn/read/3837855.html

最新回复(0)