0
点赞
收藏
分享

微信扫一扫

51Nod1087 1 10 100 1000(dp)


 这是一道很简单的动态规划题,用dp[i]存下所以1出现的下标,然后用二分查找,如果能在dp中找到,就说明是1。

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
long long dp[100000];
int Find(int x)
{
int r=100000,l=0;
while(l<=r)
{
int mid=(r+l)/2;
if(dp[mid]==x) return 1;
if(dp[mid]<x) l=mid+1;
else r=mid-1;
}
return 0;
}
int main()
{
int temp=0;
dp[0]=0;
for(long long i=1;i<100000;i++,temp++)
dp[i]=i+dp[i-1];
int T;
cin>>T;
while(T--)
{
int a;
cin>>a;
if(Find(a-1)) cout<<"1"<<endl;
else cout<<"0"<<endl;
}
return 0;
}

 

举报

相关推荐

0 条评论