下午看了评测包
My_Square:澍神这波人品攒的好啊
我:。。。mdzz,要攒人品啊
澍神:emmmm
T1.D
分析:
做过双栈队列吧,那道题是二分图染色,但是这道题要简单得多
实际上就是最长严格下降子序列
//这里写代码片
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int a[50010];
int n,k,f[50010];
int main()
{
freopen("d.in","r",stdin);
freopen("d.out","w",stdout);
int T;
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&k);
for (int i=n;i>=1;i--) scanf("%d",&a[i]);
memset(f,0,sizeof(f));
f[1]=a[1];
int t=1;
for (int i=2;i<=n;i++)
{
if (a[i]>f[t]){
f[++t]=a[i];
continue;
}
int r=lower_bound(f+1,f+1+t,a[i])-f;
f[r]=a[i];
}
if (k>=t) printf("YES\n");
else printf("NO\n");
}
return 0;
}
T2.E
这几天都是:T1简单,T2,T3看都不想看
分析:
显然dp(然并卵。。。)
题目描述一定要好好体会,
需要注意,一个点有两种转移方式:
- 转移到另一行的任何一个可行点
- 转移到相邻的第一个可行点
我们可以假设每到达一个点,我们就把ta的前驱删除
这就相当于对于当前点,我们可以转移到另一行或者ta的相邻点
设计状态:f[n][m][k]表示当前行还有n个点,另一行有m个点,当前在第k个点上
于是我们就有状态转移方程了:
T3.F
毒瘤题。。。orz
题解: