给一个k,求任意两个数字的差!=k的数字最多多少个。
例:k=1,1 1 1 1 2 3 4 4 4 4 则=8;
就是一个最长上升子序列的改版:把后一个大约前一个的判断改成了差值!=k;
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,a[1010],b[1010],k;
cin>>k;
memset(b,0,sizeof(b));
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++)
{
b[i]=1;
for(int j=0;j<i;j++)
{
if(a[i]-a[j]!=k) b[i]=max(b[i],b[j]+1);
}
}
int ans=-1;
for(int i=0;i<n;i++)
{
if(ans<b[i]) ans=b[i];
`
cout<<ans<<endl;
}
注意!dp问题就是:该状态=上一个状态或者是一个比较的状态:
if(a[i]-a[j]!=k) b[i]=max(b[i],b[j]+1);