博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVALive 5790 Ball Stacking 解题报告
阅读量:6834 次
发布时间:2019-06-26

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

题意:

有n层堆成金字塔状的球,若你要选一个球,你必须把它上面那两个球取了,当然也可以一个不取。求选的球最大的权值和。

题解:

将这堆球转成举行,第一行是(0,0),第二个是(1,0)和(0,1)……如果选(i,j)的话,(i,j)到(0,0)之间的都要选。先把f(i,j)=(i,j)+……+(0,0)预处理出来。

然后用dp[j]表示在j这一列有球被选,且j+1~n-1没选过的最大权值。如果选了(i,k)且k>=j的话,f(i,j)就加了两次所以要减去。算出选(i,k)且k+1~n-1没选过的最大值后,更新dp[k]。

由于上述的方法要求所选点(i,k)必须之前没被选过,且选了它后,它所覆盖的矩形(0,0)~(i,j)之前必须都选了,所以i要从高到低,否则比如选了(i-1,j)也会更新dp[j],这时选(i,k)的话f(i,j)显然只有一部分被选两次。然后j要从左到右。

对于点(i,k),要继承的dp[j]显然与k无关,所以可以记一个最优值。

 

//Time:135ms//Length:1122B#include 
#include
#include
#include
#include
using namespace std;#define MAXN 1010#define INF 1000000007int sta[MAXN][MAXN];long long sum[MAXN][MAXN],dp[MAXN];int main(){ //freopen("/home/moor/Code/output","r",stdin); int n; while(scanf("%d",&n)&&n) { for(int i=0;i
=0;--i) { long long best=0; for(int j=0;j

 

 

转载地址:http://hkxkl.baihongyu.com/

你可能感兴趣的文章
1 mysql索引的实现原理
查看>>
相对和绝对路径 、 cd命令 、创建和删除目录mkdir/rmdir 、 rm命令
查看>>
静态文件过期缓存、Nginx防盗链、访问控制
查看>>
解决Spring扫描实体映射文件报错的问题
查看>>
ConcurrentModificationException
查看>>
webpack-dev-server启动后, localhost:8080返回index.html的原理
查看>>
cookie是什么?作用?生命周期?
查看>>
6月20日任务 mysql用户管理 、常用sql语句、mysql数据库备份恢复
查看>>
阿里工程师开发了一款免费工具,提升Kubernetes应用开发效率
查看>>
MySQL 24小时入门笔记(1),概念
查看>>
Data Lake Analytics IP白名单设置攻略
查看>>
使用无界队列的线程池会导致内存飙升吗?
查看>>
vue.js响应式原理解析与实现—实现v-model与{{}}指令
查看>>
详解深度学习之经典网络架构——LeNet
查看>>
推荐一款超级好用的AI模型训练平台——Tesra超算网络!
查看>>
hadoop任务map将其输入写入本地硬盘,而非hdfs,为什么
查看>>
linux上运行最简单的java程序
查看>>
深度辨析 Python 的 eval() 与 exec()
查看>>
20190601预习和课堂笔记
查看>>
通过自定义SparkSQL外部数据源实现SparkSQL读取HBase
查看>>