zoukankan      html  css  js  c++  java
  • 话说要做一道奇形怪状的DP的前提是知道这是一道奇形怪状的DP

    话说要做一道奇形怪状的DP的前提是知道这是一道奇形怪状的DP

    话说要做一道奇形怪状的DP的前提是知道这是一道奇形怪状的DP

    话说要做一道奇形怪状的DP的前提是知道这是一道奇形怪状的DP

    话说要做一道奇形怪状的DP的前提是知道这是一道奇形怪状的DP

    话说要做一道奇形怪状的DP的前提是知道这是一道奇形怪状的DP

    openjudge7239

    我一直以为这是一道正常的数论,结果

    题解原文(全):

    dp[i]表示使得最大公约数是i最小使用多少数。

    简洁明快         所以脑部一下状态转移方程:dp[gcd(v[i],j)]=min(dp[gcd(v[i],j)],dp[j]+1)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    using namespace std;
    
    
    int gcd(int a,int b)
    {
    	int c;
    	while (a!=0)
    	{
    		c=a;
    		a=b%a;
    		b=c;
    	}
    	return b;
    }
    
    
    int main()
    {
    	ios_base::sync_with_stdio(false);
    	int v[702],dp[10002],n,g;
    	memset(dp,0x3f,sizeof(dp));
    	cin>>n;
    	for (int i=0;i<n;i++)
    	{
    		cin>>v[i];
    		dp[v[i]]=1;
    	}
    	for (int i=0;i<n;i++)
    	{
    		for (int j=1;j<10002;j++)
    		{
    			if (dp[j]!=0x3f3f3f3f)
    			{
    				int s=gcd(v[i],j);
    				if (dp[s]>dp[j]+1)
    				{
    					dp[s]=dp[j]+1;
    				}
    			};
    		}
    	}
    	g=v[0];
    	for (int i=1;i<n;i++)
    	{
    		g=gcd(g,v[i]);
    	}
    	cout<<n-dp[g];
    	return 0;
    }
    
  • 相关阅读:
    第一周学习总结
    lhgdialog窗口插件
    validate验证
    jxl自己写的例子
    jxl导入/导出excel
    struts2文件上传
    struts2基于注解的文件下载
    学校操场的印象
    我的开源项目:JPEG分析器
    我的开源项目:TS封装格式分析器
  • 原文地址:https://www.cnblogs.com/201312lyx/p/3829514.html
Copyright © 2011-2022 走看看