Vijos P1063 迎春舞会之交谊舞 DP

题目链接:https://vijos.org/p/1063

题意:有n(n <= 100)行,每行有2*i-1个可显字符‘#‘与‘-‘,组成一个倒三角形,问由‘-‘组成的最大三角形的‘-‘的个数为多少?

思路:顶点为倒三角,即行列奇偶相同;对于一个顶点可以扩展的最大边长首先需要上面三角为‘-‘,这样只需建立在顶点上一行的左右两个点的最大边长即可;

三角形个数就是边长的平方;

ps:开始我想的是从列的角度看轴线的左右两边的min,然后模拟行。真是醉了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string.h>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stdlib.h>
#include<time.h>
#include<stack>
#include<set>
#include<map>
#include<queue>
using namespace std;
#define rep0(i,l,r) for(int i = (l);i < (r);i++)
#define rep1(i,l,r) for(int i = (l);i <= (r);i++)
#define rep_0(i,r,l) for(int i = (r);i > (l);i--)
#define rep_1(i,r,l) for(int i = (r);i >= (l);i--)
#define MS0(a) memset(a,0,sizeof(a))
#define MS1(a) memset(a,-1,sizeof(a))
#define MSi(a) memset(a,0x3f,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l, m, rt << 1
#define rson m+1, r, rt << 1|1
typedef pair<int,int> PII;
#define A first
#define B second
#define MK make_pair
typedef __int64 ll;
template<typename T>
void read1(T &m)
{
    T x=0,f=1;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    m = x*f;
}
template<typename T>
void read2(T &a,T &b){read1(a);read1(b);}
template<typename T>
void read3(T &a,T &b,T &c){read1(a);read1(b);read1(c);}
template<typename T>
void out(T a)
{
    if(a>9) out(a/10);
    putchar(a%10+‘0‘);
}
char c[110][210];
int d[110][220];
int main()
{
    int n;
    read1(n);
    rep1(i,1,n)
        gets(c[i]+1);
    int len = 2*n,ans = 0;
    rep0(i,1,len){
        if(c[1][i] == ‘-‘){ d[1][i] = 1;ans = 1;}
    }
    rep1(i,2,n){
        rep1(j,i,len-i)
            if(c[i][j] == ‘-‘){
                d[i][j] = 1;
                if((i&1) == (j&1) && c[i-1][j]  == ‘-‘ && c[i-1][j-1]  == ‘-‘ && c[i-1][j+1]  == ‘-‘)
                    d[i][j] = min(d[i-1][j+1]+1,d[i-1][j-1]+1);
                ans = max(ans,d[i][j]);
            }
    }
    printf("%d\n",ans*ans);
    return 0;
}
时间: 2024-10-25 21:25:33

Vijos P1063 迎春舞会之交谊舞 DP的相关文章

Vijos P1062 迎春舞会之交谊舞

题目链接:https://vijos.org/p/1062 题意:输入n(n <= 1500)个女生左边有多少个男生.每个女生都和她左边最近的男生跳舞. 输出每个女生到可以与之跳舞的男生之间有几个男生;(包括跳舞的男生) input 64 5 6 6 6 6output 1 1 1 4 5 6 思路:简单的递推即可:并没有用到栈..对于第i个女生,易知当该女生左边男生的数量比前一个女生的数量多时,结果就是1.但是当出现连续的相等时,即表示这些女生之前没有男生,这时我们就需要先前找"可用&q

【模拟】Vijos P1062 迎春舞会之交谊舞

题目链接: https://vijos.org/p/1062 题目大意: 一群男女站成一排,一男一女配对,女的只找左边第一个空闲的男生,给定前n个女生左边的额男生个数,问前n个女生到男伴之间共有几个男生.(n<=1500 女生左侧男生231内) 题目思路: [模拟] 每个女生只找左边的最靠近的闲置男生,所以每当女生左边的男生数变化的时候就说明队伍里加入了新的男生,而这些男生只会影响右侧的女生. 所以我一开始想到,把男生分成好多群,加入一个女生完把最靠近她的男生群最右的男生配对给这个女生,然后该男

Vijos P1061 迎春舞会之三人组舞 DP

题目链接:https://vijos.org/p/1061 n个人选出3*m人,排成m组,每组3人. 站的队形——较矮的2个人站两侧,最高的站中间. 从对称学角度来欣赏,左右两个人的身高越接近,则这一组的“残疾程度”越低. 计算公式为 h=(a-b)^2 (a.b为较矮的2人的身高)现在候选人有n个人,要从他们当中选出3*m个人排舞蹈,要求总体的“残疾程度”最低; input: 第一排为m,n. 第二排n个数字,保证升序排列. 思路:由于和中间高的人无关,但是每次选旁边两个的时候,会由于没有比这

[dp]vijos1063 迎春舞会之集体舞

题目梗概 一个大的三角形,其中有向下的正三角形和向上的正三角形.求最大的正三角的组成人数(阴影部分不能算入) 思考 这道题目卡了我好长时间,题目和之前做过的最大正方形有异曲同工之妙.只不过这道题目需要额外的处理一下. 首先我们看下向下的正三角如何求? 手动模拟会发现,和最大正方形类似.在i行j列的三角形的大小是受 (i-1,j) (i-1,j+1) (i-1,j-1) 这三个三角形的限制.这个我就不证明了.. 不过需要注意的是只有向下的三角形才能组成正三星形,这个怎么处理呢?每次记录Max值的之

VIJOS:P1706(舞会)

描述 Arthur公司是一个等级森严的公司,它们有着严格的上司与下属的关系,公司以总裁为最高职位,他有若干个下属,他的下属又有若干个下属,他的下属的下属又有若干个下属……现接近年尾,公司组织团拜活动,活动中有一部分是自由舞会,公司的每个职员都有一个搞笑值,现要你制定一套哪些人上台的方案,使得台上所有演员的搞笑值最大.当然,职员们是不会和他们的顶头上司一起上台的. 格式 输入格式 第一行一个整数N,表示这个公司总共的职员个数. 接下来一行有N个整数,由空格隔开,第i个整数表示职员i的搞笑值Ai(-

洛谷P1352 没有上司的舞会(树形DP水题)

题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了.所以,请你编程计算,邀请哪些职员可以使快乐指数最大,求最大的快乐指数. 输入输出格式 输入格式: 第一行一个整数N.(1<=N<=6000) 接下来N行,第i+1行表示i号职员的快乐指数Ri.(-128<=Ri

tyvj1191 迎春舞会之三人组舞

背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞 描述 n个人选出3*m人,排成m组,每组3人.    站的队形——较矮的2个人站两侧,最高的站中间.    从对称学角度来欣赏,左右两个人的身高越接近,则这一组的“残疾程度”越低.    计算公式为  h=(a-b)^2  (a.b为较矮的2人的身高)    那么问题来了.    现在候选人有n个人,要从他们当中选出3*m个人排舞蹈,要求总体的“残疾程度”最低. 输入格式 第一排为m,n.    第二排n个数字,保证升序排列. 输出格式 输

tyvj1192 迎春舞会之集体舞

背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 描述 表演者排成n排,构成一个向前的正三角形(在屏幕上,即向下).而就每个人,他有可能正面朝前(小的向前正三角形).或向后三角形(小的向后正三角形).    然而这些人在服装上有明显区别——一部分穿冬季校服,其他的穿夏季校服.    现在给出每个人的着衣情况,请你求穿夏季校服的同学所构成的最大正三角形,输出所含人数.     输入格式 第一排为n.    接下来n排,第i排有2*i-1个有效字符(‘#’或‘-’,分别表示此同学穿冬季校服

Vijos Victoria的舞会3

描述 Victoria是一位颇有成就的艺术家,他因油画作品<我爱北京天安门>闻名于世界.现在,他为了报答帮助他的同行们,准备开一个舞会. Victoria准备邀请n个已经确定的人,可是问题来了:这n个人每一个人都有一个小花名册,名册里面写着他能够通知到的人的名字.比如说在A的人名单里写了B,那么表示A能够通知到B:但是B的名单里不见的有A,也就是说B不见得通知到A. Victoria觉得需要确定自己需要通知多少个人m,能够实际将所有人n都通知到.并求出一种方案以确定m的最小值是多少. 注意:自