语言习惯
1打完while后,或者for,if后不要加;分号
while( scanf("%d",&n) != EOF && n )*;*
{
scanf("%d",&m);
memset(f,-1,sizeof(f));
for(int i=1;i<=m;i++)scanf("%d",&q[i]);
q[m+1]=n;q[0]=0;
int ans=dfs(0,m+1);
printf("The minimum cutting is %d.\n",ans);
}
return 0;
2多组数据记得初始化
p.s:照明系统设计
3.同样的if语句也不要习惯性打分号;
4.字符的输入,时刻牢记是从0开始的。不要一时图懒就不改,最后忘记i就完蛋。
5.警防变量名重复(多背单词。。。)
6.为了使思维清晰,适当写一些备注。
7.开数组一定要符合题目要求。
语言运用类
1.sort的起止点问题。
sort(pass+1,pass+y-x+1 **+1** );
2.i ,j 用混:
//一开始居然写成a[i] == b[i]了。。。。
if(a[i] == b[j]) f[i][j] = f[i-1][j-1] + 1;
else f[i][j] = max (f[i-1][j] ,f[i][j-1]);
- 如果某个操作很费事,就打个标记而不用真的做。
- 网络流最大流Dinic,h数组从-1开始,len也从-1开始
5.freopen(“”,“”)一定不能打错,写完看看能否编译运行
6.有关序列成环的提取,int u = (i+n-j-1)%n+1,v = (i+j-1)%n+1;即 (pos-1)%n+1;
7.考试最后半个小时用来检查自己的傻逼错误,免得事后难受。
题目阅读
- 数组开得不适当//注意队列如果不循环要开大十倍,线段树开四倍。
- 题目要求要注意,题目范围决定什么算法。
沉痛教训
UVA10305 Ordering Tasks
一个拓扑排序居然写了那么久;
错误有两个原因;
- 1.没有注意函数的类型申明。把邻接表的插入函数写成了int型,这导致了我一直RE
- 2.变量写错,把v写成u,同样的之前犯过的还有把i写成j,把j写成i,把fx写成sx之类的。这导致了我一直wa。
- 3.当自己的代码明明应该正确但是有问题的时候要果断选择重构代码。
启发
- 打代码的时候不要图快,眼睛要盯着屏幕,时刻判断有没有打错。
2,注意函数的类型。
3.出现自己检查不出来的错误,冷静检查。或者果断选择重构,
最后,我太菜了、
RE大法
除法:分母不能为0;不然RE。
取模:同样分母不能为0;
爆零大法
1。死活不打暴力,解:如果没有符合复杂度的思路,一定先打暴力。dfs。。。。
2.数学题要打表找规律。
经验:
1.最小生成树的性质:
1).边能够把所有的点直接或间接的连通起来。
2).在满足要求1的情况下,边尽量少(n-1)
3).在满足要求1、2的情况下,那些边中长度最大的长度最小。
2.强联通分量(有向图)
任意两点可以互达。