mc不灭 发表于 2021-9-4 16:48:00

???晕

谁能给我讲讲
2047. D
(File IO): input:chess.in output:chess.out
时间限制: 2000 ms空间限制: 262144 KB具体限制
Goto ProblemSet

题目描述
维多利加:这里的确有许多书,但是……
这里没有你。
【问题描述】
      布洛瓦侯爵想利用维多利加来占卜二战的局势。侯爵只给了她一盘西洋棋和 许多书,便将她关在了王宫的地牢。
       西洋棋盘可以看成一个 N*M 的网格。西洋棋可以摆放在任何一个格子里, 而不是网格线的交叉点上。
       维多利加将一个棋子放在了左上角的格子上。她试着移动这个棋子,棋子只 会向右或者向下移动。
       每个格子有一个权值,维多利加想知道,从左上角到右下角的所有路径中:
       1.经过的格子的权值和最大是多少?
       2.权值和最大的路径一共有多少条?

输入
第一行两个整数 N,M。
接下来 N 行,每行 M 个整数,表示每个格子的权值。

输出
输出两行,第一行表示最大权值和,第二行表示权值和最大的路径数除以 1e9+7 的余数。

样例输入
3 3
1 1 1
1 2 1
1 1 1


样例输出
6
4


数据范围限制
Ai,j 表示第 i 行第 j 列格子的权值。
30%的数据保证,N≤5,M≤5。
60%的数据保证,N≤100,M≤100。
另有 20%的数据保证,对于任意的 i 和 j,Ai,j = 1。
100%的数据保证,N≤2000,M≤2000,|Ai,j|≤10^9。

叼辣条闯世界 发表于 2021-9-4 20:46:25

#include <stdio.h>
using namespace std;
long long f,g;
int main()
{
    freopen("chess.in","r",stdin);
    freopen("chess.out","w",stdout);
    int n,m,a;
    scanf("%d%d",&n,&m);
    for (int i=0;i<=m;i++)
      f=-2147483647;
    g=1;
    for (int i=1;i<=n;i++)
    {
      for (int j=1;j<=m;j++)
      {
            scanf("%d",&a);
            if (i==1&&j==1)
                f=a;
            else
            {
                if (f>f)
                  f+=a;
                else
                  if (f<f)
                  {
                        f=f+a;
                        g=g;
                  }
                  else
                  {
                        f=f+a;
                        g=(g+g)%1000000007;
                  }
            }
      }
    }
    printf("%lld\n",f);
    printf("%lld\n",g);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

mc不灭 发表于 2021-9-17 21:59:40

叼辣条闯世界 发表于 2021-9-4 20:46


多谢多谢
页: [1]
查看完整版本: ???晕