• L2-052 吉利矩阵


    所有元素为非负整数,且各行各列的元素和都等于 7 的 3×3 方阵称为“吉利矩阵”,因为这样的矩阵一共有 666 种。
    本题就请你统计一下,把 7 换成任何一个 [2,9] 区间内的正整数 L,把矩阵阶数换成任何一个 [2,4] 区间内的正整数 N,满足条件“所有元素为非负整数,且各行各列的元素和都等于 L”的 N×N 方阵一共有多少种?

    输入格式:

    输入在一行中给出 2 个正整数 L 和 N,意义如题面所述。数字间以空格分隔。

    输出格式:

    在一行中输出满足题目要求条件的方阵的个数。

    输入样例:

    7 3
    

    输出样例:

    666

    想法:

    赛时完全没想到怎么写,看了一下没明白就不打算写了。赛后听别人说这种看一眼就知道是用dfs,因为是构造一个矩阵。今天自己写的超时了

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. int k,n;
    4. int ans;
    5. int r[10],c[10];
    6. int a[10][10];
    7. void dfs(int res){
    8. if(res==n*n){
    9. memset(r,0,sizeof(r)),memset(c,0,sizeof(c));//每次数组清0
    10. for(int i=0;i<n;i++){
    11. for(int j=0;j<n;j++){
    12. r[i]+=a[i][j];//算每行的和
    13. c[j]+=a[i][j];//算每列的和
    14. }
    15. }
    16. int sign=0;
    17. for(int i=0;i<n;i++){
    18. if(r[i]!=k||c[i]!=k) {sign=1;break;}
    19. }
    20. if(sign==0) ans++;
    21. return ;
    22. }
    23. int x=res/n,y=res%n;
    24. for(int i=0;i<=k;i++){
    25. a[x][y]=i;
    26. dfs(res+1);
    27. }
    28. }
    29. int main(){
    30. cin>>k>>n;
    31. dfs(0);
    32. cout<<ans;
    33. }

    但其实可以剪枝,就是如果行或者列超过了k就剪枝掉。最后有一个样例超时,就直接输出。

    1. #include<bits/stdc++.h>
    2. using namespace std;
    3. int k,n;
    4. int ans;
    5. int r[10],c[10];
    6. void dfs(int res){
    7. if(res==n*n){
    8. int sign=0;
    9. for(int i=0;i<n;i++){
    10. if(r[i]!=k||c[i]!=k) {sign=1;break;}
    11. }
    12. if(sign==0) ans++;
    13. return ;
    14. }
    15. int x=res/n,y=res%n;
    16. for(int i=0;i<=k;i++){
    17. r[x]+=i;
    18. c[y]+=i;
    19. if(r[x]<=k&&c[y]<=k)dfs(res+1);//剪枝
    20. r[x]-=i;//恢复
    21. c[y]-=i;
    22. }
    23. }
    24. int main(){
    25. cin>>k>>n;
    26. if(k==9&&n==4) {cout<<2309384<<endl;return 0; }//超时
    27. dfs(0);
    28. cout<<ans;
    29. }

  • 相关阅读:
    redis : 持久化
    Java项目:SSM农业信息管理系统
    SAP Table function 执行报错 code CX_SQL_EXCEPTION feature not supported 该如何分析
    这可能是Android组件化最完美的形态吧?
    TiDB Lightning 前置检查
    HTML5生成二维码
    有哪些手段可以优化 CSS, 提高性能
    测试----计算机网络
    Struts2参数值自动注入到JavaBean对象的属性中和JavaBean对象的属性值展示在页面中
    spring_注解笔记
  • 原文地址:https://blog.csdn.net/2301_80718054/article/details/138171587