3、17笔记

简介: 3、17笔记

费解的开关:


枚举情况求最值、最优解的套路:


卡壳原因:套路的细节不熟悉


1.1


在枚举情况前,变量设置res,求最小值要设置一个大的数0x3f3f3f3f,最大值要设置小的数


枚举的每一种情况里要设置一个变量来统计这种情况的值,数量,末尾要和res比较


枚举完后再输出


1.2如果枚举的是操作情况,在枚举前要对被操作对象备份,操作后要还原对象

        int res = 0x3f3f3f3f;
        memcpy(backup,f,sizeof f);
        // 错误:备份的位置错误,应该输入后再备份,对备份的位置不熟悉
        for(int op = 0;op < 32;op++){
            int cnt = 0; 
            for(int i = 0;i < 5;i++)//卡壳,不熟悉位运算枚举开关点按情况的操作
            {
                if(op >> i & 1){
                    turn(0,i);
                    // 错误,这题下表用了0~4,对第一行操作应该是0才对,没有确认好下标
                    //卡壳,不熟悉位运算枚举里的坐标获取;
                    cnt++;
                }
            }
            for(int i = 0;i < 4;i++){
                for(int j = 0;j < 5;j++){
                    if(f[i][j] == '0'){
                        turn(i+1,j);
                        cnt++;
                    }
                }
            }
            bool all_turn_on = true;
            for(int i = 0;i < 5;i++){
                if(f[4][i] == '0') all_turn_on = false;
            }
            if(all_turn_on) res = min(res,cnt);
            // 错误:res应该是在所有可能都枚举完后才判断是否没有符合题意的res要赋值-1的
            memcpy(f,backup,sizeof f);
        }
        if(res > 6) res = -1;
        cout << res << endl;

输入数据与变量数据类型选择的套路

卡壳原因,见过没总结,踩陷阱了,题目输入的点阵之间没有空格,我没有注意到这个点,用int读入数据,结果直接把整一行当做一个数字读入了

如果输入的数据之间没有空格,要把数据当作字符来读取,不能用整型或浮点型来读取

char f[N][N];
for(int i = 0;i < 5;i++){
            for(int j = 0;j < 5;j++){
                cin >> f[i][j];
            }
        }
  1. 坐标移动的枚举套路

卡壳原因:不熟悉套路的细节,没有判断边界

int dx[] = {1,-1,0,0,0},dy[] = {0,0,1,-1,0};
    for(int i = 0;i < 5;i++){
        int a = x + dx[i];
        int b = y + dy[i];
        if(a < 0 || a >=5 || b < 0 || b >=5)continue;
        // 错误:没有判断边界,对坐标移动的相关注意点不熟
        //         if (a < 0 || a >= 5 || b < 0 || b >= 5) continue;   // 在边界外,直接忽略即可
        f[a][b] ^= 1;
    }
目录
相关文章
|
8月前
|
关系型数据库 MySQL 数据库
|
编译器 数据安全/隐私保护 C++
C++笔记 下
C++笔记 下
57 0
|
存储 自然语言处理 算法
C++系列笔记(九)
C++系列笔记(九)
|
存储 安全 编译器
C++系列笔记(八)
C++系列笔记(八)
|
存储 程序员 C++
C++系列笔记(十)
C++系列笔记(十)
|
编译器 C++
C++系列笔记(一)
C++系列笔记(一)
|
缓存 JavaScript 前端开发
WebAPIs-第05天笔记(二)
WebAPIs-第05天笔记(二)
94 0
WebAPIs-第05天笔记(二)
|
存储 移动开发 开发框架
WebAPIs-第07天笔记(一)
WebAPIs-第07天笔记
131 0
WebAPIs-第07天笔记(一)
|
移动开发 JavaScript 前端开发
WebAPIs-第04天笔记(二)
WebAPIs-第04天笔记(二)
119 0
WebAPIs-第04天笔记(二)
|
JavaScript 前端开发
WebAPIs-第02天笔记(二)
WebAPIs-第02天笔记(二)
81 0
WebAPIs-第02天笔记(二)