1978: [BeiJing2010]取数游戏 game
2013-12-01 15:34
344 查看
类似最长上升子序列的做法,只不过有个要求就是gcd必须要>l,这样根号n枚举因数,然后dp
dp[i]表示以i作为最大公因数可以选的数的最多个数
满足gcd>l才更新dp
#include<stdio.h>
#include<algorithm>
using namespace std;
int dp[2000000],a[100000];
int main()
{
int n,l,ans=0,k;
scanf("%d %d",&n,&l);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
k=0;
for(int j=1;j<=a[i]/j;j++)
if(a[i]%j==0)
{
k=max(k,dp[j]);
k=max(k,dp[a[i]/j]);
}
k++;
for(int j=1;j<=a[i]/j;j++)
{
if(a[i]%j==0)
{
if(j>=l) dp[j]=k;
if(a[i]/j>=l) dp[a[i]/j]=k;
ans=max(ans,dp[j]);
ans=max(ans,dp[a[i]/j]);
}
}
}
printf("%d",ans);
while(1);
return 0;
}
dp[i]表示以i作为最大公因数可以选的数的最多个数
满足gcd>l才更新dp
#include<stdio.h>
#include<algorithm>
using namespace std;
int dp[2000000],a[100000];
int main()
{
int n,l,ans=0,k;
scanf("%d %d",&n,&l);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
{
k=0;
for(int j=1;j<=a[i]/j;j++)
if(a[i]%j==0)
{
k=max(k,dp[j]);
k=max(k,dp[a[i]/j]);
}
k++;
for(int j=1;j<=a[i]/j;j++)
{
if(a[i]%j==0)
{
if(j>=l) dp[j]=k;
if(a[i]/j>=l) dp[a[i]/j]=k;
ans=max(ans,dp[j]);
ans=max(ans,dp[a[i]/j]);
}
}
}
printf("%d",ans);
while(1);
return 0;
}
相关文章推荐
- BZOJ 1978: [BeiJing2010]取数游戏 game( dp )
- 【BZOJ 1978】 [BeiJing2010]取数游戏 game
- BZOJ1978: [BeiJing2010]取数游戏 game
- bzoj 1978: [BeiJing2010]取数游戏 game -- dp
- BZOJ 1978: [BeiJing2010]取数游戏 game
- bzoj 1978: [BeiJing2010]取数游戏 game 数学
- 【bzoj1978】【BeiJing2010】取数游戏 game【递推】
- bzoj1978 [BeiJing2010]取数游戏 game DP
- BZOJ1978: [BeiJing2010]取数游戏 game
- BZOJ1978 [BeiJing2010]取数游戏 建图+拓扑序
- 【bzoj1978】 BEIJING2010 取数游戏 game dp优化
- bjoi 2010 取数游戏 动态规划
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十七)地图自适应区域加载
- UVA_Rotation Game<旋转游戏> UVA 1343
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十)向Silverlight移植②
- HDU 1527 (POJ 1067) 取石子游戏 Wythoff Game
- 【BZOJ1977】[BeiJing2010组队]次小生成树 Tree 最小生成树+倍增
- Tetris game engine TETRIS 游戏引擎
- 【u108】取数游戏
- 【BZOJ1443】游戏Game(JSOI2009)-二分图最大匹配+博弈