BUPT 2015 newbie practice #2 div2-C - 想一想-HDU 4925 Apple Tree

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=102419#problem/C

题意:给你n×m的格子,每个格子你可以选择给1,或者使它上下左右(如果有)的数字乘2,你对每个格子操作的先后顺序是自由的,求所有格子数字总和的最大值。

t组(小于100)数据,n和m(1到100)

题解:要使总和最大,那就每隔一个格子给1,使得每个给1的格子周围都是乘2的格子,这样它就乘了最多次2,比如3行4列

1 0 1 0

0 1 0 1

1 0 1 0

这里0表示使周围的乘2,我们的顺序是先给1,再乘2,于是总和是4+8+16+8+4+8=48

法一。

模拟这些格子,根据n和m,构造出上述的01二维数组,再对每个格子判断周围几个0,然后乘几次2,累加答案

代码:

#include<cstdio>
#include<cstring>

int ma[105][105];
int main()
{
    int n,m,t,k,ans,u,h;
    int ma[105][105];
    scanf("%d",&t);

    while(t--)
    {
        memset(ma,0,sizeof(ma));
        ans=0;
        k=0;
        scanf("%d%d",&n,&m);
        for(int i=0; i<n; i++)
        {
            for(int j=0+k; j<m; j+=2)
                ma[i][j]=1;//设置它为1
            k=!k;
        }
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                if(ma[i][j])
                {
                    h=1;
                    u=0;
                    if(i-1>=0)if(!ma[i-1][j])u++;//如果为0,代表乘2
                    if(i+1<n)if(!ma[i+1][j])u++;
                    if(j-1>=0)if(!ma[i][j-1])u++;
                    if(j+1<m)if(!ma[i][j+1])u++;
                    for(int l=1; l<=u; l++)h*=2;
                    ans+=h;
                }
            }
        }
        printf("%d\n",ans);

    }
    return 0;

}

法二。

如果行列数之和为奇数,则给1,并且使它周围为乘2,则这个1就要乘几次2了,根据是否在边缘,判断乘几次2,累加答案

代码:

//code from lyt
#include<cstdio>
using namespace std;
int T;
int n,m;
long long ans=0;
long long now=0;
int main()
{
    scanf("%d",&T);
    while(T)
    {
        scanf("%d%d",&n,&m);
        ans=0;
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                if((i+j)&1)
                {
                    now=1;
                    if(i>1)
                        now<<=1;
                    if(j>1)
                        now<<=1;
                    if(i<n)
                        now<<=1;
                    if(j<m)
                        now<<=1;
                    ans+=now;
                }
            }
        }
        printf("%lld\n",ans);
        T--;
    }
    return 0;
}

法三。

通过分析推出公式(x表示n,y表示m)

ans=1,当x=1,y=1;

ans=2*(y-1),当x=1,y>1;

ans=(x-1)*2,当x>1,y=1;

ans=(x-1)*8*(y-1),当x>1,y>1;

具体怎么分析推出的,...不详

代码:

//code from zdh#include<stdio.h>
int T,x,y,s;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&x,&y);
        if(x>1)
        {
            if(y==1)
                s=(x-1)*2;
            else
                s=(x-1)*8*(y-1);
        }
        else
        {
            if(y==1)
                s=1;
            else
                s=2*(y-1);
        }
        printf("%d\n",s);
    }
    return 0;
}

  

时间: 2025-01-02 18:04:28

BUPT 2015 newbie practice #2 div2-C - 想一想-HDU 4925 Apple Tree的相关文章

【CodeForces 312B】BUPT 2015 newbie practice #3A Archer

题 SmallR is an archer. SmallR is taking a match of archer with Zanoes. They try to shoot in the target in turns, and SmallR shoots first. The probability of shooting the target each time is  for SmallR while  for Zanoes. The one who shoots in the tar

Codeforces gym Hello 2015 Div1 B and Div2 D

Codeforces gym 100571 problem D Problem 给一个有向图G<V,E>和源点S,边的属性有长度L和颜色C,即E=<L,C>.进行Q次询问,每次给定一个点X,输出S到X的最短路的长度(不存在则输出 -1).但要求S到X的路径中相邻两条边颜色不一样. Limits Time Limit(ms): 1000 Memory Limit(MB): 256 |V|, |E|: [1, 10^5] X, S: [1, |V| ] L: [1, 10^9] |C|

Codeforces gym Hello 2015 Div1 C and Div2 E

Codeforces gym 100570 problem C Codeforces gym 100571 problem E Problem 给一个N行M列的矩阵Ma,进行Q次(Q<=10)查询,每次给定一个K,问有多少子矩阵,满足最大值max - 最小值min <=K. Limits Time Limit(ms): 8000 Memory Limit(MB): 512 N, M: [1, 400] Q: [1, 10] Ma(i, j), K: [1, 10^9] Solution (Th

想一想social VR might just work

昨天玩了Oculus上的Casino VR(其实之前就知道这个瑞士公司,也下过standalone的PC client). 几把下来,居然觉得fun,总结起来: 1.是在一个immersive的环境中,所以很容易就一把一把接着不停的玩.因为poker的节奏紧凑.摘头盔需要下一定的决心. 2.虽然和真实poker真人间的交互差得很远,交互被局限在语音(虽然没人用,感觉很蠢)和有限的头的朝向.移动.有一局我装怂勾引玩家堵大的,然后跟进,用full house赢了,对方那个呆滞表情(目前还在研究VR里

云王想咗想,好系诚恳噉话可唔可以睇到

云王想咗想,好系诚恳噉话:"好简单,可唔可以睇到啲令人厌恶嘅嘢比寡人早死,寡人咩系开心呀."容璟微微一笑,一字一句道:「凭你本心,你呢世都唔生."云王面色一变,但又露出笑意:"讲笑啫,不过你所言,令寡人好痛心,为咗生,寡人祖孙三代可都费尽咗捱眼瞓.寡人先祖求仙失败之后,就返国都老老实实噉做咗国君,后死于一个一场宫变.先父醉心于炼丹,有一日丹炉炸咗,佢都殡日啦.而寡人,就系三代云王.所以呢一世,无论点,寡人都要成功." http://p.baidu.com/

如何判断一个女孩想不想和你聊天?恋爱话术库!

如何判断一个女孩想不想和你聊天? 一.女生想和你聊天的表现: 1)眼神交流.如何判断一个女孩想不想和你聊天?看她的眼睛.如果她也在时不时地和你有眼神交流,或者是眼睛时不时看看周围又看看你,而她又是微笑的,说明她对你们之间的谈话很感兴趣. 2)细微小动作.如何判断一个女孩想不想和你聊天?不管是男人还是女人,在自己感兴趣的人面前,都会不自觉地对自身的肢体语言做微妙的调整.女性最常见的动作时不时摆弄一下头发和衣服:抓一小撮头发绕着手指玩儿,或者拿一小撮头发不停地扫脸颊,或者是揉一揉手腕,捏一下脖子等.

苦逼的程序员 如果你想离职 关于离职 想转行 想裸辞的你, 可以看看这些 拂去你各种疑难杂症 包括但不限于 想要裸辞怎么办, 不想上班了怎么办, 想换工作了压力大怎么办, 没有动力上班怎么办? 想转行但又不知道干什么 想离职又不知道干什么 想离职但是又没钱怎么办....

关于离职 想转行 想裸辞的你, 可以看看这些   拂去你各种疑难杂症 包括但不限于 想要裸辞怎么办, 不想上班了怎么办, 想换工作了压力大怎么办,  没有动力上班怎么办?想转行但又不知道干什么想离职又不知道干什么想离职但是又没钱怎么办....值得借鉴 思考 离职365天,“家里蹲”的他们过得还好吗?O网页链接O目前有多少人 离职的 家里蹲的 举个手目前有多少人 离职的 家里蹲的 举个手辞职了家里蹲快四个月,无所事事O网页链接离职前你必须面对(想好)的几个问题 O网页链接离职前你必须要面对或是想清

2次创业经验谈(想创业想做事的人不要错过)

2次创业,遇到了很多问题.之前分享了一些,最近又遇到了很多问题,今天及时总结下,要不然又忘记忽视了.生活中的道理,就摆在那里,越早认识到,解决或避免这些问题,越是能节省精力,把事情做好. 1.不靠谱25岁之前的人,尤其是在校大学生,不靠谱的几率非常大.一是能力问题.只懂理论,或者照葫芦画瓢,独自一人分析和解决技术问题的能力非常差劲.二是态度问题.不能保证的事,瞎说.结果,像我这种喜欢"尝试着相信别人的人" 总是受伤. 比如,有的"小雷粉" 想实习,在我的强烈推荐和帮

停一停,想一想

来深圳一个多月了,经历许多,少了整理,少了思考,少了总结. 还是不怎么会安排自己的生活吗?或许静下来思考,自己该如何安排自己的生活,比有点忙乱的生活节奏要好很多吧.一正经下来说要整理,总结就不知道要写什么了.这是读书少,思考少,总结少的原因吗?不要急,任何时候都还不算太晚,把自己理清以后,都可以让自己生命活得精彩. 说不出的转变,只感觉到自己的转变.当然陋习还是存在.工作任务还不是那么清晰,工作任务安排得还不是那么得心应手,让自己真正地去思考解决问题.我很喜欢自己这样的工作状态: 我也很喜欢这样