易错的i
在循环中注意i从0还是1开始循环,注意循环结束条件的+1,-1,<=,<,可以使用例子判断。循环内有时会修改i的值,应先进行其他计算再修改i。注意循环内外变量的使用和改变。
常见策略
使用分治法将较大问题分解,求解后合并,在递归中需要仔细判断条件;贪心法常适用于最优解的问题,同样将大的问题分解成一个个相同的步骤,编码时需要谨慎,防止遗漏或出错;若输入数值的取值范围较小,允许时间复杂度达到n^3 与n^4 ,可以想到暴力破解,递归枚举;动态规划的关键是找准状态转移方程,并定义边界,有时候很难想,需要自己先用简单的数据模拟一下。
递归枚举题目推荐
使用函数并保证准确
//对数组进行操作:
int a[maxn];
memset(a,0,maxn);
sort(a,a+maxn);
reverse(a,a+maxn);
//对二维数组
int a[maxn][maxn];
for(int i=0;i<maxn;i++) memset(a[i],0,maxn);
sort(a[i],a[i]+maxn);
//math:
pow(x,y);
fabs(x); //浮点型
//algorithm:
abs(x); //整数型
max(x,y);min(x,y);
swap(x,y);
__gcd(x,y); //最大公约数
//cctype:
isdigit(c); //判断是否为数字
islower(c); //判断是否为小写字母
isupper(c); //判断是否为大写字母
sort函数要求引入两个指针,并对两指针中间的的内容进行排序,若希望排序数组a下标0到下标3(a[0]-a[3])的元素,需要使用sort(a,a+4)而不是sort(a,a+3)。这点需要注意。
Tips
1.可以提前做好代码模板,这在大多数题中都适用:
#include<bits/stdhc++.h> //包含c++所有头文件
using namespace std;
const int maxn=;
int ; //定义全局变量,可以省略使用函数时的引入
int main(){
}
2.有时题目输入为不定长数组,并且不给出数组长度n,因此无法使用常规的(一),可以使用(二)。
//(一)
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
//(二)
int i=0;
do{
cin>>a[i++];
}while(getchar()!='\n');
网友评论