题目大意:填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; }