【发布时间】:2015-06-17 19:21:05
【问题描述】:
这是我的问题的一部分。我尝试了很多次但无法得到答案
问题陈述
您将获得一份参加 ACM-ICPC 世界总决赛的 N 人的名单。他们每个人要么精通某个主题,要么不精通。找出 2 人团队可以知道的最大主题数。并找出有多少团队可以知道最大数量的主题。
注意假设 a、b、c 是三个不同的人,那么 (a,b) 和 (b,c) 算作两个不同的团队。
输入格式
第一行包含两个整数,N 和 M,用一个空格分隔,其中 N 代表人数,M 代表主题数。接下来是 N 行。 每行包含一个长度为 M 的二进制字符串。如果第 i 行的第 j 个字符为 1,则第 i 个人知道第 j 个主题;否则,他不知道这个话题。
约束
2≤N≤500
1≤M≤500
输出格式
在第一行,打印 2 人团队可以知道的最大主题数。 在第二行,打印可以知道最大主题数的 2 人团队的数量。
示例输入
4 5
10101
11100
11010
00101
样本输出
5
2
说明
(1, 3) 和 (3, 4) 知道所有 5 个主题。所以一个 2 人团队知道的最大主题是 5 个,而只有 2 个团队可以做到这一点。
这是我工作的一部分。任何线索我怎样才能让它工作
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, m, max = 0, max1 = 0, count = 0;
cin >> n >> m; //for input of N and M
int a[n][m];
for (int i = 0; i<n; i++) //for input of N integers of digit size M
for (int j = 0; j<m; j + >>
cin >> a[i][j];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
max = 0;
for (int k = 0; k<m; k++)
{
if (a[i][k] == 1 || a[j][k] == 1) max++;
cout << k;
if (k = m - 1 && max>max1) max1 = max;
if (k == m - 1 && max == max1) count++;;
}
}
}
cout << max1 << endl << count;
return 0;
}
我认为输入逻辑的方式是错误的。请你帮帮我。我从 5 天开始就被这个问题困住了。
请仅帮助我了解我应该如何输入以及如何读取整数的数字。
【问题讨论】:
-
你不能这样做
cin>>n>>m;,然后int a[n][m];,数组大小必须在编译时知道,而不是在运行时。 -
那我该如何回答这个问题呢?
-
你可以发
std::vector<std::vector<int>>。 -
但是先生,我将如何具体读取整数的数字以及在编译时对其大小进行标定的数组大小问题在 c99 中有效