ACM ICPC South American Regional 2008

题目大意:给定一个矩阵,每个元素有一个值,每次取一个元素都会使得当前元素左右两个相邻项变为零,上下两行变为零,如图阴影部分所示,求最大能取到的值之和。

解法:我竟然没有看出来是双重动规,果然太久不做动规了。当时还脑残的写了个四维的(虽然有三维的取值范围都是0,1),最后降到三维,然后wa了一次改了改之后AC了。正确的解法应该是每列dp一次,算出当前行的最优值,然后再用这个值按行dp。f[i]=max{f[i-1],f[i-2]+a[i]}空间上其实可以优化很多,dp数组只要开到3就好了,滚动一下即可。我没有滚动,直接开了两个MAXN的一维数组,然后每次用之前习惯性的memset了一下,没想到居然超时了,取消memset之后就过了。看来要慎用memset,如果明显知道不会出现新旧值混用的情况,就不必要memset了。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <vector>
 4 #include <cmath>
 5 #include <algorithm>
 6 #include <utility>
 7 #include <cstring>
 8 #include <fstream>
 9 #include <string>
10 using namespace std;
11 const int MAXN=100005;
12 int f[MAXN],g[MAXN],a[MAXN];
13 int main(int argc, char* argv[])
14 {
15     int m,n;
16     while(scanf("%d%d",&m,&n),(m!=0&&n!=0))
17     {
18         //memset(g,0,sizeof(g));
19         for(int i=1;i<=m;i++)
20         {
21             for(int j=1;j<=n;j++)
22                 scanf("%d",&a[j]);
23         //    memset(f,0,sizeof(f));
24             f[1]=a[1];
25             for(int j=2;j<=n;j++)
26                 f[j]=max(f[j-1],f[j-2]+a[j]);
27             if(i==1)
28                 g[1]=f[n];
29             else
30                 g[i]=max(g[i-1],g[i-2]+f[n]);
31         }
32         cout<<g[m]<<endl;
33     }
34 }

转载于:https://www.cnblogs.com/jzlikewei/archive/2012/05/02/2478413.html

UVALive 4212 Candy相关推荐

  1. [LeetCode]135.Candy

    [题目] There are N children standing in a line. Each child is assigned a rating value. You are giving ...

  2. LeetCode之Candy

    [题目] There areNchildren standing in a line. Each child is assigned a rating value. You are giving ca ...

  3. DP UVALive 6506 Padovan Sequence

    题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...

  4. BZOJ 4212: 神牛的养成计划

    4212: 神牛的养成计划 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 142  Solved: 30 [Submit][Status][Disc ...

  5. The UVALIVE 7716 二维区间第k小

    The UVALIVE 7716 二维区间第k小 /** 题意:给一个n * n的矩阵,有q个查询每次查询r,c,s,k表示已(r,c)为右上角 大小为s的正方形中 第k小的元素n <= 250 ...

  6. UVALive 8513 lovers 2017 西安区域赛 B 贪心+multiset

    UVALive 8513 有2种人,每个人有自己的权值$A_i$ $B_i$ 当$A_i + B_i >=K$时 两个人可以配对 问最多多少人可以配对 解法 : 把$/{ A_i /}$ 排序 ...

  7. Animated Eye Candy for Programmers

    作者采用vs2008编译,c#代码 Animated Eye Candy for Programmers By Phillip Piper | 17 Apr 2010 A class library ...

  8. 训练指南 UVALive - 3713 (2-SAT)

    layout: post title: 训练指南 UVALive - 3713 (2-SAT) author: "luowentaoaa" catalog: true mathja ...

  9. 天题系列: Candy

    排排坐分果果,这道题还是蛮难想的,答案忘了从哪里看的了 public int candy(int[] ratings) {if(ratings == null) return 0;int len = ...

最新文章

  1. 如何仅从SQL Server DateTime数据类型返回日期
  2. 爱奇艺大数据分析平台的演进之路
  3. openssh for windows
  4. 学习记录 php,PHP进阶篇学习专用记录
  5. script标签中defer和async的区别
  6. Singleton 与 MonoState 模式
  7. python excel图表 导出word模板_使用python将Excel数据填充Word模板并生成Word
  8. 【历史上的今天】8 月 31 日:人工智能起源;GPU诞生;Windows 98中文版来了
  9. 软件工程基础知识--需求分析
  10. 东财《组织行为学X》综合作业
  11. 高通CSRA6640单芯片DDFA放大器解决方案
  12. Airbnb短租房源数据分析
  13. ribbonmq超时配置_使用RabbitMQ实现订单超时取消(延迟队列)
  14. mybatis类型转换器处理PostGis数据库geometry类型转换
  15. 正方形里面两个扇形相交部分_边长为1的正方形内,两个扇形,一个半圆,求阴影面积....
  16. 美国国家信用合作社管理局(NCUA)发布RFI询问信用合作社加密相关问题
  17. 大幅提升冲浪效率,搜狗高速浏览器3.0
  18. Visual Studio 2010中国团队的研发内幕
  19. java.lang.IllegalStateException: getWriter() has already been called for this response问题解决
  20. 你的计划为什么执行不下去?怎么破?

热门文章

  1. 【前端后端运维】Web开发人员学习路线,汇总整理
  2. 【2021牛客暑期多校训练营6】H Hopping Rabbit(扫描线)
  3. 2020 计蒜之道 预赛 第一场 爆零记
  4. 【PAT乙】1044 火星数字 (20分)
  5. 【NOIP1997】【Luogu2626】斐波那契数列(枚举,质因数分解)
  6. java 解析二进制_Java二进制指令代码解析
  7. Python入门--局部变量,全局变量,作用域,LEGB规则
  8. mysql 丛集_MYSQL
  9. 实验4 数据库的连接查询
  10. 圆方树(bzoj 2125: 最短路)