虽然不知道鸽巢原理是啥,但这道题简直是显而易见吧。
要想把糖全吃完,必须先找出最长序列(将其长度减一看为隔板),然后剩下的子序列肯定小于等于隔板数,直接对隔板进行加厚操作就行。而且由于不用输出路径,直接判断剩下的如果小于隔板数就输出NO。
这题和DP完全就不是一个级别的,是我做DP心里扭曲了吗。。。
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <string.h>
using namespace std;
const int N = 2005;
int dp[N][1005];
int main()
{
// freopen("in.txt", "r", stdin);
int t, n, m;
__int64 sum;
scanf("%d", &t);
while(t --)
{
int maxx = 0;
sum = 0;
scanf("%d", &n);
while(n --)
{
scanf("%d", &m);
maxx = max(maxx, m);
sum += m;
}
if(sum - maxx < maxx - 1) printf("No\n");
else printf("Yes\n");
}
return 0;
}