zoukankan      html  css  js  c++  java
  • bzoj1025

    题意:

    找环

    有多少种不同的排列

    使排列数目为n

    题解:

    考虑dp

    f[i][j]表示前i个质数,和为j的方案数

    然后转移一下即可

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=105;
    int n,tot,mark[N],pri[N];
    ll ans,f[N][N];
    int main()
    {
        scanf("%d",&n);
        for (int i=2;i<N;i++)
         {
            if (!mark[i])pri[++tot]=i;
            for (int j=1;j<=tot&&i*pri[j]<=1000;j++)
             {
                mark[i*pri[j]]=1;
                if (i%pri[j]==0)break; 
             }
         }    
        f[0][0]=1;
        for(int i=1;i<=tot;i++)
         {
            for (int j=0;j<=n;j++)f[i][j]=f[i-1][j];
            for (int j=pri[i];j<=n;j*=pri[i])
             for (int k=0;k<=n-j;k++)f[i][k+j]+=f[i-1][k];
         }
        for (int i=0;i<=n;i++)ans+=f[tot][i];    
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    004 连接查询
    003 常用函数说明
    003 限定查询
    002 基础查询
    001 基础数据表脚本
    001 redis的简介和重点
    006 表单组件
    005 基本表单
    004 表格元素
    谚语,
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8446083.html
Copyright © 2011-2022 走看看