记录21
#include<bits/stdc++.h>
using namespace std;
int main()
{
int day = 1;
bool UnHappy = 0;
int max=-1;
int a,b,t;
while (day <= 7) {
cin >> a >> b;
if(a+b>8) UnHappy=1;
if(a+b>max){
max=a+b;
t=day;
}
day++;
}
if(UnHappy) cout<<t;
else cout<<0;
return 0;
}
突破口
津津如果一天上课超过八个小时就会不高兴
如果不会不高兴则输出 0,输出最不高兴的是周几(用 1,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)
思路
简单的枚举,周一到周日遍历一遍,遍历的过程中记录有不高兴情况,同时记录下最大时间。没有就输出0
代码简析
int day = 1;
bool UnHappy = 0;
int max=-1;
int a,b,t;
day从第一天开始记录,UnHappy记录不开心情况,max记录最大值(设置为-1,这样第一天的时间开始比较),a,b输入的数据,t记录最不开心的那一天是周几
while (day <= 7) {
cin >> a >> b;
if(a+b>8) UnHappy=1;
if(a+b>max){
max=a+b;
t=day;
}
day++;
}
if(a+b>8) UnHappy=1;有不高兴情况先打开开关
if(a+b>max)记录最大不开心时间与周几
补充
枚举算法的使用场景、注意要点与技巧
1. 枚举算法概述
定义:枚举算法是一种通过遍历所有可能的解来找到问题答案的算法。它是一种简单的暴力搜索方法,适用于解空间较小的问题。
特点:
简单直观:逻辑简单,易于理解和实现。
适用范围广:适用于各种类型的问题,尤其是解空间较小的问题。
效率较低:对于解空间较大的问题,效率较低,可能导致超时。
2. 枚举算法的使用场景
2.1 解空间较小
定义:当问题的解空间较小,即所有可能的解的数量不多时,可以使用枚举算法。
示例:
数字问题:如找出1到100之间的所有质数。
组合问题:如从5个物品中选择3个的所有组合。
2.2 问题规模较小
定义:当问题的规模较小,即输入数据的范围较小时,可以使用枚举算法。
示例:
字符串问题:如找出长度为5的字符串的所有子串。
数组问题:如找出一个长度为10的数组的所有子数组。
2.3 无明显规律
定义:当问题没有明显的规律或公式可以求解时,可以使用枚举算法。
示例:
排列问题:如找出1到5的所有排列。
组合问题:如找出1到5的所有组合。
3. 枚举算法的注意要点
3.1 明确解空间
定义:在开始枚举之前,必须明确问题的解空间,即所有可能的解的集合。
示例:
数字问题:找出1到100之间的所有质数,解空间是1到100的所有整数。
字符串问题:找出长度为5的字符串的所有子串,解空间是所有可能的子串。
3.2 避免重复
定义:在枚举过程中,避免重复枚举相同的解,以提高效率。
示例:
组合问题:从5个物品中选择3个的所有组合,避免重复选择相同的3个物品。
3.3 优化剪枝
定义:在枚举过程中,通过剪枝技术跳过不可能的解,以提高效率。
示例:
数字问题:找出1到100之间的所有质数,跳过所有偶数(除了2)。
3.4 边界检查
定义:在枚举过程中,进行边界检查,确保枚举的解在有效范围内。
示例:
数组问题:找出一个长度为10的数组的所有子数组,确保子数组的索引在数组范围内。
4. 枚举算法的技巧
4.1 顺序枚举
定义:按照一定的顺序(如从小到大)枚举所有可能的解,以避免重复。
示例:
数字问题:找出1到100之间的所有质数,从小到大枚举每个数字。
字符串问题:找出长度为5的字符串的所有子串,按子串的起始位置从小到大枚举。
4.2 多重循环
定义:使用多重循环枚举多个变量的所有可能组合,适用于多维问题。
示例:
组合问题:从5个物品中选择3个的所有组合,使用三重循环枚举所有可能的组合。
4.3 递归枚举
定义:使用递归方法枚举所有可能的解,适用于复杂问题。
示例:
排列问题:找出1到5的所有排列,使用递归方法枚举所有可能的排列。
4.4 优化剪枝
定义:在枚举过程中,通过剪枝技术跳过不可能的解,以提高效率。
示例:
数字问题:找出1到100之间的所有质数,跳过所有偶数(除了2)。
组合问题:从5个物品中选择3个的所有组合,跳过重复的组合。
4.5 数据结构优化
定义:使用合适的数据结构来存储和操作数据,以提高枚举的效率。
示例:
数组问题:找出一个长度为10的数组的所有子数组,使用数组存储子数组的和。
字符串问题:找出长度为5的字符串的所有子串,使用字符串数组存储子串。
5. 实例分析
5.1 找出1到100之间的所有质数
问题描述:找出1到100之间的所有质数。
注意要点:
明确解空间:解空间是1到100的所有整数。
避免重复:每个数字只检查一次。
优化剪枝:跳过所有偶数(除了2)。
边界检查:确保检查的数字在1到100之间。
技巧应用:
顺序枚举:从小到大枚举每个数字。
优化剪枝:跳过所有偶数(除了2)。
数据结构优化:使用布尔数组标记每个数字是否为质数。
5.2 从5个物品中选择3个的所有组合
问题描述:从5个物品中选择3个的所有组合。
注意要点:
明确解空间:解空间是从5个物品中选择3个的所有可能组合。
避免重复:每个组合只枚举一次。
优化剪枝:跳过重复的组合。
边界检查:确保选择的物品索引在范围内。
技巧应用:
多重循环:使用三重循环枚举所有可能的组合。
优化剪枝:跳过重复的组合。
数据结构优化:使用数组存储组合结果。
6. 总结
枚举算法是一种通过遍历所有可能的解来找到问题答案的算法,适用于解空间较小、问题规模较小或无明显规律的问题。在实现枚举算法时,需要注意以下要点:
明确解空间:明确问题的解空间,即所有可能的解的集合。
避免重复:在枚举过程中,避免重复枚举相同的解。
优化剪枝:通过剪枝技术跳过不可能的解,以提高效率。
边界检查:在枚举过程中,进行边界检查,确保枚举的解在有效范围内。
同时,可以应用以下技巧来提高枚举算法的效率和正确性:
顺序枚举:按照一定的顺序枚举所有可能的解。
多重循环:使用多重循环枚举多个变量的所有可能组合。
递归枚举:使用递归方法枚举所有可能的解。
优化剪枝:通过剪枝技术跳过不可能的解。
数据结构优化:使用合适的数据结构来存储和操作数据。
1047

被折叠的 条评论
为什么被折叠?



