比赛总结

题目

题意:

有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 <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
#define MAXN 1010
#define INF 1000000007 int 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<n;++i)
for(int j=0,x=i,y=0;j<=i;++j,--x,++y)
scanf("%d",&sta[x][y]);
sum[0][0]=sta[0][0];
for(int i=1;i<n;++i) sum[i][0]=sta[i][0]+sum[i-1][0],sum[0][i]=sta[0][i]+sum[0][i-1];
for(int i=1;i<n;++i)
for(int j=1;j<=n-i;++j) sum[i][j]=sta[i][j]+sum[i][j-1]+sum[i-1][j]-sum[i-1][j-1];
for(int i=0;i<n;++i) dp[i]=-(long long)INF*INF;
for(int i=n-1;i>=0;--i)
{
long long best=0;
for(int j=0;j<n-i;++j)
{
dp[j]=max(dp[j],best+sum[i][j]);
best=max(best,dp[j]-sum[i][j]);
}
}
long long ans=0;
for(int i=0;i<n;++i) ans=max(ans,dp[i]);
cout<<ans<<'\n';
}
return 0;
}

UVALive 5790 Ball Stacking 解题报告的更多相关文章

  1. UVALive 5790 Ball Stacking DP

    DP的方向真的很重要,这题做的时候死活想不出来,看了题解以后恍然大悟原来这么简单. 题意: 有n层堆成金字塔状的球,若你要选一个球,你必须把它上面那两个球取了,当然也可以一个不取.求选的球最大的权值和 ...

  2. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  3. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  4. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  5. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  6. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  7. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  8. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  9. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

随机推荐

  1. android开发之蓝牙配对连接的方法

    最近在做蓝牙开锁的小项目,手机去连接单片机总是出现问题,和手机的连接也不稳定,看了不少蓝牙方面的文档,做了个关于蓝牙连接的小结. 在做android蓝牙串口连接的时候一般会使用 ? 1 2 3 4 5 ...

  2. RedHat Linux 5.5安装JDK+Tomcat并部署Java项目

    与大家分享下RedHat Linux 5.5安装JDK+Tomcat并部署Java项目的步骤,希望对大家有用. 1.下载并安装jdk 虚拟机中安装RedHat Linux 5.5 64位企业版, 这里 ...

  3. perl use utf8

    utf8 Perl编译 来启用/禁用 UTF-8(or UTF-EBCDIC) 在源代码里 简洁: use utf8; no utf8; # Convert the internal represen ...

  4. [WCF]WCF起航

    解决方案概览: Client:windows 控制台应用程序. WcfService1: windows 服务应用程序. WCFWebTest:asp.net 空web应用程序. 变量程序命名.结构可 ...

  5. Cocos2dx3.1 获取当前系统时间

    以下是获代替码 原文地址:http://blog.csdn.net/qqmcy/article/details/28233565 // // Tools.h // // // Created by 杜 ...

  6. [Warning] Aborted connection 11203 to db: 'ide' user: 'nuc' host: 'prd01.mb.com' (Got an error writi

    PS:一台物理机扯分了3个虚拟机,一个主db,一个主备,一个从备. 切换到0301的时候 Sep  6 09:16:16 prddb0301 mysqld: 130906  9:16:16 [Warn ...

  7. CentOS 6.4 x86_64 安装GCC 4.7.3

    下载gcc-4.7.3.tar.gz, 解压缩 wget ftp://ftp.gnu.org/gnu/gcc/gcc-4.7.3/gcc-4.7.3.tar.gz tar -xzvf gcc-4.7. ...

  8. hdu 5014 思维题/推理

    http://acm.hdu.edu.cn/showproblem.php?pid=5014 从小数開始模拟找方法规律,然后推广,尤其敢猜敢尝试,错了一种思路继续猜-----这是一种非常重要的方法啊 ...

  9. Mac AppStore 登陆提示 未知错误

    Mac Book 登陆的时候提示未知错误,刚开始以为是需要内建网卡后来才得知: 如果是黑苹果,或者是网卡没有对应上的,需要内建网卡 mac 系统默认的是无线网卡en0 其他都网卡 以此类推 如果是ma ...

  10. 管道是如何处理HTTP请求的?

    管道是如何处理HTTP请求的? 我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但是就具体的实现来说,由于其中涉及很多对象的交互,我想很 ...