noip模拟赛 但有用

题目描述

给定一个 n ∗ m 个矩阵,矩阵中每个数都是 [1, 12] 内的整数。你可以执行下列两个操作任意多次:

• 指定一行,将该行所有数字 +1.

• 指定一列,将该列所有数字 +1.

如果执行完上述操作之后,矩阵中某个数变成了 3, 6, 9, 12 其中的某一个,我们认为这个数是稳的。

给定初始矩阵,求出任意执行操作之后稳数的最多个数。

输入输出格式

输入格式:

 

第一行包含两个正整数 n, m。

接下来 n 行,每行 m 个数,描述这个矩阵。

 

输出格式:

 

一个整数,表示答案。

 

输入输出样例

输入样例#1: 
3 3 
1 2 3 
3 2 4 
1 2 1
输出样例#1: 
7
输入样例#2: 
5 5
2 4 6 8 10 
1 2 3 4 5 
3 4 5 6 7 
7 8 9 10 11 
5 10 12 3 7
输出样例#2: 
20

分析:对于每一行和每一列而言,加i次一定比加i+3次更优,因为3次一个循环,有可能i+3次后数就大于12了,所以对于每一行每一列最多只需要加2次.这种题行与列之间互相有影响,但是行与行,列与列之间没有影响的,可以先把行的操作给枚举出来,列是独立的,贪心地考虑每一列操作多少次即可.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n, m, a[20][20], cnt[20], c1, c2, c0, res, ans;

void solve()
{
    res = 0;
    for (int i = 1; i <= m; i++)
    {
        c0 = c2 = c1 = 0;
        for (int j = 1; j <= n; j++)
        {
            if ((a[j][i] + cnt[j]) % 3 == 0 && a[j][i] + cnt[j] <= 12)
                c0++;
            if ((a[j][i] + cnt[j] + 1) % 3 == 0 && a[j][i] + cnt[j] + 1 <= 12)
                c1++;
            if ((a[j][i] + cnt[j] + 2) % 3 == 0 && a[j][i] + cnt[j] + 2 <= 12)
                c2++;
        }
        res += max(max(c0, c1), c2);
    }
    ans = max(ans, res);
}

void dfs(int dep)
{
    if (dep == n + 1)
    {
        solve();
        return;
    }
    for (int i = 0; i <= 2; i++)
    {
        cnt[dep] = i;
        dfs(dep + 1);
    }
}

int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
            scanf("%d", &a[i][j]);
    dfs(1);
    printf("%d\n", ans);

    return 0;
}

 

 
  

转载于:https://www.cnblogs.com/zbtrs/p/7709875.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NOI(全国青少年信息学奥林匹克竞)模拟的测试数据是指用于评测参选手的程序的输入和对应的输出。测试数据是非常重要的,因为它决定了参选手的程序能否正确地解决问题。 在NOI模拟中,测试数据具有以下特点: 1.充分覆盖:测试数据应涵盖各种可能的输入情况,包括边界条件和极端情况。通过提供不同的测试数据,可以考察选手对问题的全面理解和解决能力。 2.随机性和均衡性:为了公平起见,测试数据应该是随机生成的,而不是针对某个特定算法或解法设计的。同时,测试数据应该是均衡的,即各种情况的概率应该大致相等,以避免偏向某些解法。 3.合理性和可行性:测试数据应该是合理和可行的,即符合题目要求的输入数据,并且是选手能够通过编写程序来处理的。测试数据应该考虑到程序的限制和时间复杂度,以充分测试选手的编程能力。 NOI模拟的测试数据通常由经验丰富的考题组负责生成。他们会根据题目的要求和限制,设计出一组合理、充分、随机和均衡的测试数据,以确保参选手的程序在各种情况下都能正确运行,并且能通过性能测试。 总之,测试数据在NOI模拟中起到了至关重要的作用,它既考察了选手对问题的理解和解决能力,又提高了选手编程的技巧和效率。同时,合理和恰当的测试数据也是公平竞的保证,确保每个参选手有相同的机会和条件进行竞争。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值