(算是dp吧) 小茗的魔法阵 (fzu 2225)

http://acm.fzu.edu.cn/problem.php?pid=2225

Problem Description

在打败了易基•普罗布朗、诺姆•普罗布朗之后,小茗同学开始挑战哈德•普罗布朗。

一番交战之后,哈德展开了一大波攻击。小茗同学为了抵御攻击,一边放魔法阵一边放魔法阵,然后他也不知道自己一共放了几个魔法阵。回收魔法阵是需要花费时间的,为了抵御下一波攻击,小茗同学需要知道自己共放了几个魔法阵,由于情况紧急,这个任务需要由你来完成。

魔法阵是三角形△的,比如

.............

.x..x....x...

...xxx..x.x..

.......xxxxx.

.............

以上都认为是魔法阵。

(即:三角形三个顶点为(i,j),(i+k,j-k),(i+k,j+k),边上均为’x’。三角形中间的元素没有要求。一个’x’可以同时属于多个魔法阵。单个’x’也算一个魔法阵。)

场地可以认为是一个N×M的矩形,每个位置上为’.’表示没有东西,或’x’表示有魔法阵。

 Input

第一行是一个整数T(T<=10),表示共有T组测试数据。

每组数据的第一行包含两个整数N M(N,M≤1000),表示矩阵大小。

接下来N行 ,每行M个字母为‘.’或者‘x’。

 Output

每组数据输出独占一行,输出格式为”Case #x: y”,x从1开始,表示数据组号,y表示相应的魔法阵的数量。

 Sample Input

1 3 3 .x. xxx ...

 Sample Output

Case #1: 5

 Source

FOJ有奖月赛-2016年4月(校赛热身赛)

#include <cstdio>
#include <queue>
#include <stack>
#include <cmath>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

#define lson 2*root
#define rson 2*root+1
#define met(a,b) (memset(a,b,sizeof(a)))
typedef long long LL;
const LL mod = 1000000007;
const LL INF= 1e9+7;
const int N = 1100;

char s[N][N];
int dp[N][N], dL[N][N], dR[N][N];

///右边,左下,右下记录连续的, 最后再判断能够增加的大三角形,代码还是很容易能看懂的

int main()
{
    int T, iCase=1;
    scanf("%d", &T);
    while(T--)
    {
        int i, j, k, n, m, cnt=0;

        scanf("%d%d", &n, &m);

        met(s, 0);
        met(dp, 0);
        met(dL, 0);
        met(dR, 0);

        for(i=1; i<=n; i++)
        {
            scanf("%s", s[i]+1);
            for(j=1; j<=m; j++)
            {
                if(s[i][j]==‘x‘)
                {
                    cnt++;
                    dp[i][j] = dL[i][j] = dR[i][j] = 1;
                }
            }
        }

        for(i=n; i>=1; i--)
        for(j=m; j>=1; j--)
        {
            if(dp[i][j])
                dp[i][j] += dp[i][j+1];
            if(dL[i][j])
                dL[i][j] += dL[i+1][j-1];
            if(dR[i][j])
                dR[i][j] += dR[i+1][j+1];
        }

        for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
        {
            for(k=1; k<=min(dL[i][j], dR[i][j]); k++)
            {
                if(dp[i+k][j-k]>=2*k+1)
                    cnt++;
            }
        }

        printf("Case #%d: %d\n", iCase++, cnt);
    }
    return 0;
}
时间: 2024-10-06 11:39:24

(算是dp吧) 小茗的魔法阵 (fzu 2225)的相关文章

FZU 2225 小茗的魔法阵 扫描线+树状数组

这个题和一个CF上的找"Z"的题差不多,都是扫描线+树状数组 从右上角的主对角线开始扫描,一直扫到左下角,每次更新,右延伸等于该扫描线的点,注意在其所在的树状数组更新就好了 时间复杂度O(n^2logn) #include <stdio.h> #include <iostream> #include <vector> #include <math.h> #include <set> #include <map> #

[P2119]魔法阵 (模拟?搜索?)

很玄学 我暴力都没做出来 #include <cstdio> int n,m,x[40001],vis[15001],a[15001],b[15001],c[15001],d[15001]; int main() { //freopen("magic.in","r",stdin); //freopen("magic.out","w",stdout); scanf("%d%d",&n,&a

天气晴朗的魔法 大+小生成树(最大值最小)/二分

天气晴朗的魔法 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接起来,形成一个魔法阵. 魔法链是做法成功与否的关键.每一条魔法链都有一个魔力值V,魔法最终的效果取决于阵中所有魔法链的魔力值的和. 由于逆天改命的魔法过于暴力,所以我们要求阵中的魔法链的魔力值最大值尽可能的小,与此同时,魔力值之和要尽可能的大. 现在给定魔法师人数N,魔法链数目M.求此魔法阵的最大效

关于基础DP

openjudge  8464 这道题其实很简单,算是DP的基础题,比较适合开拓DP思维. 题目比较有欺骗性,其实稍微想想就可以解决,因为题意说第一次卖出后才能买入,所以我们可以考虑枚举断点,所以题目一下变得简单,我们线性扫两遍,算最大值就好了. 具体为: 由于不能同时进行两次交易,所以枚举断点,一遍扫做1到n的前n个的最大值,由于最大值一定是单调递增的,所以每次读入新的a[i],判断是否有更优解就好了,同理,一遍扫n到1的后n个的最大值,做同样的事,然后枚举断点取最大值. 代码如下: 1 #i

51nod 1640 天气晴朗的魔法 (最小生成树)

1640 天气晴朗的魔法 题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 取消关注 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接起来,形成一个魔法阵. 魔法链是做法成功与否的关键.每一条魔法链都有一个魔力值V,魔法最终的效果取决于阵中所有魔法链的魔力值的和. 由于逆天改命的魔法过于暴力,所以我

1640 天气晴朗的魔法

1640 天气晴朗的魔法 题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接起来,形成一个魔法阵. 魔法链是做法成功与否的关键.每一条魔法链都有一个魔力值V,魔法最终的效果取决于阵中所有魔法链的魔力值的和. 由于逆天改命的魔法过于暴力,所以我们要求

51nod 1640 天气晴朗的魔法

题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接起来,形成一个魔法阵. 魔法链是做法成功与否的关键.每一条魔法链都有一个魔力值V,魔法最终的效果取决于阵中所有魔法链的魔力值的和. 由于逆天改命的魔法过于暴力,所以我们要求阵中的魔法链的魔力值最大值尽可能的小,与此

魔法跳舞链 (最小生成树)

个人心得:周测的时候心情有点闷,看到就不想去做,比完后第二天拿着一做,这么简单,我也是醉了. 虽然最后一周了,但是我还是希望你能稳住别被其他事扰乱军心了,希望以后的你能够静下心去思考. 这题:就是用Kruskal算法第一遍找出最大值中的最小值,第二次再反过来用一次就好了. 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为"天气晴朗"的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接起来,形成一个魔法阵. 魔法链是

深圳交通整治查扣涉摩涉电车辆 一日拟拘留435人

大家又是微微一惊很显然这些法师型怪物的防御力实在是太低了地狱战马看向我的目光似乎柔和了一些不到三秒钟的时间血饮天下已经翻身而起一脸恼羞成怒的样子手持阔剑便打出了二连击横扫千军+裂地斩 不对这句话源自诗经下一句是纵我不往子宁不嗣音单手一张魔法阵乍现召唤灵儿对方焰兽从天扑来看起来跟绝对嚣张一样颐指气使不久之后开始晚饭又给凌雪打了一通电话过去说了一下晚上的行动准时上线 策马登上了睺望塔四周一看以东方的傲世联盟攻势最猛玩家的等级也最好暂时不太好捏而西方的金戈铁马则是最弱的玩家只有不到一万人组织松散更加缺