ループ特集

  //[x,y] = [0,0]~[9,9]までの間で更新していく.
  for(int i = 0; i < N; i++) {
    for(int j = i; j < N; i++) {
      for(int k = 0; k < 9; k++) {
	sum += arr[k];
	ans[k] = min(ans[k], sum);
      }
    }
  }
//全探索
for(int i = 0; i < (1 << n); i++) {
  ..
}
int cnt = 0;
while(cnt < n) {
..
}
のところを
while(cnt++ < n)とか、while(++cnt <= n)とかしちゃうと思わぬバグを生む。
たとえば、while文で条件を満たしていなかったときもカウントすることになる。
べつにそれでいい時は大丈夫だが、どうしても困るときがあるので、そういう時は、
int cnt = 0;
while(cnt < n) {
	bool flag = false;
	for(int i = 0; i < sz-1; i++) {
		if(data[i] < data[i+1]) {
			swap(data[i], data[i+1]); flag = true;
			break;
		}
	}
	if(!flag) break; //cntがカウントされたら困る。
	cnt++;
}
という風に、最後にcntをインクリメントさせるようにする。

例外は、
while(++cnt <= n) {
  (if文を持たない構文やその集合);
}
これだけかな。