DAY - 03

滑动窗口法

滑动窗口发例题

/*************************************************************************
    > File Name: 滑动窗口.cpp
    > Author: qwq
    > Mail: 
    > Created Time: 2017年11月07日 星期二 17时02分40秒
 ************************************************************************/

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include"ss.h"


using namespace std;


int main()
{
   // printf("%d\n", strlen(s));

    long long sum = 1;
    long long zero = 0;
    long long maxn = 0;
    for(long long i = 0; i < strlen(s); i++)
    {
        if(s[i] != '0')
        {
            sum *= s[i] - '0';
        }
        else
        {
            ++zero;
        }
        if(i > 12)
        {
            if(s[i - 13] != '0')
            {
                sum /= s[i - 13] - '0';
            }
            else
            {
                -- zero ;
            }
        }
        if(zero == 0 && maxn < sum)
        {
            maxn = sum;
        }
    }
    printf("%lld\n", maxn);

}

方向数组

方向数组例题

/*************************************************************************
    > File Name: 方向数组.cpp
    > Author: qwq
    > Mail: 
    > Created Time: 2017年11月07日 星期二 19时07分40秒
 ************************************************************************/

#include<iostream>
#include<stdio.h>
using namespace std;

long long a[30][30] = {0};
long long maxn = 0;
long long sum = 0;
long dir[4][2] = {0, 1, 1, 1, 1, 0, 1, -1};

int main()
{
    for(long i = 5; i < 25; i++)
    {
        for(long j = 5; j < 25; j++)
        scanf("%lld", &a[i][j]);
    }


    for(long i = 5; i < 25; i++)
    {
        for(long j = 5; j < 25; j++)
       // long sum = 1;
        {
            for(int k = 0; k < 4; k++)
            {
                 long sum = 1;
                for(int dis = 0; dis < 4; dis++)
                {
                   // long sum = 1;

                    int x = i + dir[k][0] * dis;
                    int y = j + dir[k][1] * dis;
                    sum *= a[x][y];
                }
                if(maxn < sum)
                maxn = sum;
            }



        }
    }

    printf("%lld\n", maxn);
}

记忆化搜索

记忆化搜索

/*************************************************************************
    > File Name: 记忆化搜索.cpp
    > Author: 
    > Mail: 
    > Created Time: 2017年11月09日 星期四 13时57分57秒
 ************************************************************************/

#include<iostream>
#include<stdio.h>
#include<math.h>

#define maxn_x  1000000
#define maxn_range  5000000
long long keep[maxn_range + 5] = {0};
using namespace std;


int getlength(long long x)
{
    if(x == 1)
    return 1;
    if(x <= maxn_x && keep[x] != 0)
    return keep[x];
    long long len;
    switch(x % 2)
    {
        case 0:
        len = getlength(x / 2) + 1;
        break;
        case 1:
        len = getlength(x * 3 + 1) + 1;
        break;
    }
    if(x <= maxn_x)
    keep[x] = len;
    return len;
}



int main()
{
    long long maxn = 0;
    long long num = 0;
    for(long long i = 1; i <= maxn_x; i++)
    {
        if(getlength(i) > maxn)
        {
            maxn = getlength(i);
            num = i;
        }
    }
    printf("%lld\n", num);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值