//[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文を持たない構文やその集合);
}
これだけかな。