小美拿到了一个的矩阵,其中每个元素是 0 或者 1。 小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。 现在,小美希望你回答有多少个的完美矩形区域。你需要回答的所有答案。
区块链毕设网qklbishe.com为您提供问题的解答
小美拿到了一个的矩阵,其中每个元素是 0 或者 1。
小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。
现在,小美希望你回答有多少个的完美矩形区域。你需要回答
的所有答案。
#include <iostream> using namespace std; int n; int graph[201][201]; int dp[201][201];//表示0,0 到i,j有多少个1 int main() { cin >> n; char c; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { cin >> c; graph[i][j] = c - '0'; } dp[0][0] = graph[0][0]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { if (j == 0) dp[i][j] = graph[i][j]; else dp[i][j] = dp[i][j - 1] + graph[i][j]; } for (int i = 1; i < n; i++) for (int j = 0; j < n; j++) { dp[i][j] += dp[i - 1][j]; } // for (int i = 0; i < n; i++) { // for (int j = 0; j < n; j++) { // cout << dp[i][j] << ' '; // } // cout << endl; // } for (int i = 1; i <= n; i++) { if (i % 2 == 1) { cout << 0 << endl; continue; } int sum1 = 0; int res = 0; //对于每一个矩阵i*i的右下角遍历,计算i*i矩阵有多少个1 for (int x = i - 1; x < n; x++) for (int y = i - 1; y < n; y++) { sum1 = dp[x][y] - (x - i >= 0 ? dp[x - i][y] : 0) - (y - i >= 0 ? dp[x][y - i] : 0) + (x - i >= 0 && y - i >= 0 ? dp[x - i][y - i] : 0); if (sum1 == i*i/2) res++; } cout<<res<<endl; } } // 64 位输出请用 printf("%lld")
15:56
以上就是关于问题小美拿到了一个的矩阵,其中每个元素是 0 或者 1。
小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。
现在,小美希望你回答有多少个的完美矩形区域。你需要回答的所有答案。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训