鱼C论坛

 找回密码
 立即注册
查看: 1445|回复: 2

[已解决]???晕

[复制链接]
发表于 2021-9-4 16:48:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
谁能给我讲讲
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
  1. #include <stdio.h>
  2. using namespace std;
  3. long long f[2001],g[2001];
  4. int main()
  5. {
  6.     freopen("chess.in","r",stdin);
  7.     freopen("chess.out","w",stdout);
  8.     int n,m,a;
  9.     scanf("%d%d",&n,&m);
  10.     for (int i=0;i<=m;i++)
  11.         f[i]=-2147483647;
  12.     g[1]=1;
  13.     for (int i=1;i<=n;i++)
  14.     {
  15.         for (int j=1;j<=m;j++)
  16.         {
  17.             scanf("%d",&a);
  18.             if (i==1&&j==1)
  19.                 f[j]=a;
  20.             else
  21.             {
  22.                 if (f[j]>f[j-1])
  23.                     f[j]+=a;
  24.                 else
  25.                     if (f[j]<f[j-1])
  26.                     {
  27.                         f[j]=f[j-1]+a;
  28.                         g[j]=g[j-1];
  29.                     }
  30.                     else
  31.                     {
  32.                         f[j]=f[j-1]+a;
  33.                         g[j]=(g[j]+g[j-1])%1000000007;
  34.                     }
  35.             }
  36.         }
  37.     }
  38.     printf("%lld\n",f[m]);
  39.     printf("%lld\n",g[m]);
  40.     fclose(stdin);
  41.     fclose(stdout);
  42.     return 0;
  43. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-4 20:46:25 | 显示全部楼层    本楼为最佳答案   
  1. #include <stdio.h>
  2. using namespace std;
  3. long long f[2001],g[2001];
  4. int main()
  5. {
  6.     freopen("chess.in","r",stdin);
  7.     freopen("chess.out","w",stdout);
  8.     int n,m,a;
  9.     scanf("%d%d",&n,&m);
  10.     for (int i=0;i<=m;i++)
  11.         f[i]=-2147483647;
  12.     g[1]=1;
  13.     for (int i=1;i<=n;i++)
  14.     {
  15.         for (int j=1;j<=m;j++)
  16.         {
  17.             scanf("%d",&a);
  18.             if (i==1&&j==1)
  19.                 f[j]=a;
  20.             else
  21.             {
  22.                 if (f[j]>f[j-1])
  23.                     f[j]+=a;
  24.                 else
  25.                     if (f[j]<f[j-1])
  26.                     {
  27.                         f[j]=f[j-1]+a;
  28.                         g[j]=g[j-1];
  29.                     }
  30.                     else
  31.                     {
  32.                         f[j]=f[j-1]+a;
  33.                         g[j]=(g[j]+g[j-1])%1000000007;
  34.                     }
  35.             }
  36.         }
  37.     }
  38.     printf("%lld\n",f[m]);
  39.     printf("%lld\n",g[m]);
  40.     fclose(stdin);
  41.     fclose(stdout);
  42.     return 0;
  43. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-17 21:59:40 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-18 10:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表