您的位置:首页 > 其它

【HDU 5653】Bomber Man wants to bomb an Array.|DP

2016-03-31 09:48 381 查看
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
double f[2000+10];
int T,n,m;
bool boom[2000+10];
int main()
{
scanf("%d",&T);
while(T--)
{
memset(f,0,sizeof(f));
memset(boom,false,sizeof(boom));
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++)
{
int x;
scanf("%d",&x);
boom[x+1]=true;
}
for(int i=1;i<=n;i++)
if(boom[i])
{
//	cout<<i<<endl;
for(int l=i;l>=1;)
{
for(int r=i;r<=n;)
{
//	cout<<l<<" "<<r<<" "<<"@@"<<endl;
f[r]=max(f[r],f[l-1]+log(r-l+1));//,cout<<r<<' '<<f[r]<<endl;
r++;
if(boom[r]) break;
}

l--;
if(boom[l]) break;
}

}
long long ans=(long long)(1e6*f
/log(2));
printf("%lld\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: