【算法学习笔记】24.记忆化搜索 解题报告 SJTU_OJ 1002 二哥种花生

吴学长的代码上做了一点简化修改,本质一样。在外面铺了一圈0,让代码更简单一点,不用考虑边界情况了。

题目: http://acm.sjtu.edu.cn/OnlineJudge/problem/1002

#include <iostream>
#include <string>
using namespace std;

int main(int argc, char const *argv[])
{
    int L,W;    cin>>L>>W;
    int** sums = new int*[L+1];
    for (int i = 0; i <= L; ++i)    sums[i] = new int[W+1];
    //memset(sums,0,sizeof(sums));
    //input and store the sum
    for (int i = 1; i <= L; ++i)
    {
        for (int j = 1; j <= W; ++j)
        {
            int t; cin>>t;
         //sum[i][j] can be considered as three components:t,up,left-sidebar
            sums[i][j] = t + sums[i-1][j] +                 (sums[i][j-1] - sums[i-1][j-1]);
        }
    }
    //move the scope and calculate the maximum
    int a,b; cin>>a>>b;
    int max=0;
    for (int i = a; i <= L; ++i)
    {
        for (int j = b; j <= W; ++j)
        {
            //sum - left - up
            int tmp = 0;
            tmp = sums[i][j] - sums[i][j-b]               - (sums[i-a][j] - sums[i-a][j-b]);
            if(tmp > max)
                max = tmp;
        }
    }
    cout<<max<<endl;
    for (int i = 0; i < L+1; ++i)
    {
        delete[] sums[i];
    }
    delete[] sums;
    return 0;
}
时间: 2024-08-07 16:59:20

【算法学习笔记】24.记忆化搜索 解题报告 SJTU_OJ 1002 二哥种花生的相关文章

【算法学习笔记】29.规律题 解题报告 SJTU_OJ 1101 SuperXOR

1101. SuperXOR Description Pangzi recently realized that bitwise XOR operation is just an addition without carries. For example, when computing (1001)_2 XOR (1101)_2, you write down: 1001 + 1101 ------- 0100 You see, everything is like an addition, e

【算法学习笔记】28.枚举法 解题报告 SJTU_OJ 1255 1256 魔戒

1256. 你的魔戒?不,是你的魔戒.加强版 Description 在前往末日火山的途中,佛罗多与他的霍比特人同胞不幸被半兽人抓住了.半兽人要对每个霍比特人进行询问,以找出哪个霍比特人携带了至尊魔戒.每个霍比特人可能会说以下几种话: I have the ring. 我有魔戒. I have not the ring. 我没有魔戒. XXX has the ring. XXX有魔戒.(XXX表示某个霍比特人的名字) XXX has not the ring. XXX没有魔戒. Today is

算法导论学习-动态规划之记忆化搜索

一. 动态规划 动态规划(dynamic programming),与“分治思想”有些相似,都是利用将问题分 为子问题,并通过合并子问题的解来获得整个问题的解.于“分治”的不同之处在 于,对于一个相同的子问题动态规划算法不会计算第二次,其实现原理是将每一个计算过的子问题的值保存在一个表中. 二. 记忆化搜索 我们常见的动态规划问题,比如流水线调度问题,矩阵链乘问题等等都是“一步接着一步解决的”,即规模为 i 的问题需要基于规模 i-1 的问题进行最优解选择,通常的递归模式为DP(i)=optim

【算法学习笔记】91.简单森林计数 SJTU OJ 1045 二哥的家族

其实巨水...然而 不用scanf prinf 根本过不了.....真无聊 第一版代码有点问题 效率不高 主要是考虑到这个家族有可能一开始就是个森林 不是从树里分出去的 实际上数据点还是一棵树 然后变成的森林 这样的话只要三个数组就可以了 alive记录是否活着 sons记录每个人的子节点个数 father记录每个人的父节点 可以根据alive[father[x]]判断x是否是一个树的根节点 cnt 维护家族数目 每次死人的时候 判断死的人是某个树的根节点还是只是一个叶子节点 就可以了 #inc

FZU 2092 bfs+记忆化搜索

晚上团队训练赛的题 和普通bfs不同的是 这是同时操纵人与影子两个单位进行的bfs 由于可能发生人和影子同时接触水晶 所以不可以分开操作 当时使用node记录人和影子的位置 然后进行两重for循环来分别改变位置 结果超内存 分析了一下应该是队列超了内存 毕竟如果每个点都存入的话一个点最多可以衍生出25个node 然后t最大为200s 一定会超 之间还发生了一些并不能理解的bug 被逼到最后重构才拿到了一个超内存 名次也不好 急需一个ac来赶上去 简直要烧起来了 侧面反映心理素质还是差一些 当时未

HDU - 6143 Killer Names(dp记忆化搜索+组合数)

题意:从m种字母中选取字母组成姓名,要求姓和名中不能有相同的字母,姓和名的长度都为n,问能组成几种不同的姓名. 分析: 1.从m种字母中选取i种组成姓,剩下m-i种组成名. 2.i种字母组成长度为n的姓-----可转换成用i种颜色给n个球染色,记忆化搜索 dfs(n,i)---用i种颜色给n个球染色的方案数 先给第1个小球涂色,有m种选择,假设涂色为color[1], 那么剩下n-1个小球: 如果继续使用color[1],则问题转化为用m种颜色给n-1个小球涂色: 如果不再使用color[1],

【算法学习笔记】55.DFS 记忆化搜索 SJTU OJ 1063 小M爱滑雪

Description 小M超级喜欢滑雪~~ 滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当小M滑到坡底,便不得不再次走上坡或者等待升降机来载你.小M想知道滑雪场中最长底的滑坡.滑雪场由一个二维数组给出.数组的每个数字代表点距离水平面的相对距离.下面是一个例子 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 小M可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小.在上面的例子中,一条可滑行的

动态规划、记忆化搜索、Dijkstra算法的总结

动态规划 动态规划算法通常用于求解具有某种最优性质的问题.在这类问题中,可能会有许多可行解.每一个解都对应于一个值,我们希望找到具有最优值的解.动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解.与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的.若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次.如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这

HDU 1142 A Walk Through the Forest (记忆化搜索+Dijkstra算法)

A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7583    Accepted Submission(s): 2791 Problem Description Jimmy experiences a lot of stress at work these days, especial