题目大意:填n个数,对于每个位置,遇到0随便填正整数,遇到1不比前面小,遇到2比前面大,填数之和能不超过m吗?

要想数字之和不超过m,那么填的数字尽量小!

从左往右,下标从小到大填,任意填必填最小值1,不比前面小就填前面的那个数,比前面大就只大1。

细节1:第一个数必填1,虽然数据保证b[1]是0,我们还是早做打算。

细节2:n个数之和可能爆int?1+2+...+100000就爆掉了?

细节3:中途判断出结果,也要把当组数据读完。

#include <stdio.h>
int t, s, n, m, i, j, k, p, a, b;
int main(){
    scanf("%d", &t);
    while(t--){
        scanf("%d%d%*d", &n, &m);
        p = s = 1;
        for(i=2; i<=n; i++){
            scanf("%d", &b);
            if(s > m) continue;
            if(b == 0) a = 1;
            if(b == 1) a = p;
            if(b == 2) a = p+1;
            s += a, p = a;
        }
        if(s > m) printf("No\n");
        else printf("Yes\n");
    }
    return 0;
}