zoukankan      html  css  js  c++  java
  • 【bzoj1025】[SCOI2009]游戏

    1025: [SCOI2009]游戏

    Time Limit: 1 Sec  Memory Limit: 162 MB
    Submit: 1987  Solved: 1289
    [Submit][Status][Discuss]

    Description

      windy学会了一种游戏。对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应。最开始windy把数字按
    顺序1,2,3,……,N写一排在纸上。然后再在这一排下面写上它们对应的数字。然后又在新的一排下面写上它们
    对应的数字。如此反复,直到序列再次变为1,2,3,……,N。 
    如: 1 2 3 4 5 6 对应的关系为 1->2 2->3 3->1 4->5 5->4 6->6 
    windy的操作如下 
    1 2 3 4 5 6 
    2 3 1 5 4 6 
    3 1 2 4 5 6 
    1 2 3 5 4 6 
    2 3 1 4 5 6 
    3 1 2 5 4 6 
    1 2 3 4 5 6 
    这时,我们就有若干排1到N的排列,上例中有7排。现在windy想知道,对于所有可能的对应关系,有多少种可
    能的排数。

    Input

      包含一个整数N,1 <= N <= 1000

    Output

      包含一个整数,可能的排数。

    Sample Input

    【输入样例一】
    3
    【输入样例二】
    10

    Sample Output

    【输出样例一】
    3
    【输出样例二】
    16
     
     
     
     
    【题解】

    我们发现如果把 n 个数的排列分解成 m 个循环的话,那么最少再变回 1,2,……,n 的次数就为每个循环大
    小的最小公倍数。因此原问题等价于把一个自然数n 分解成一些自然数的和,求最小公倍数有多少种情况。
    因此我们可以考虑把 n 以内的素数分解出来,用背包 DP 即可。

     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<ctime>
     7 #include<algorithm>
     8 using namespace std;
     9 long long n,tot,ans,check[1010],prime[1010],f[1010][1010];
    10 void gets()
    11 {
    12     for(int i=2;i<=n;i++)
    13     {
    14         if(!check[i])  prime[++tot]=i;
    15         for(int j=1;j<=tot&&i*prime[j]<=n;j++)
    16         {
    17             check[i*prime[j]]=1;
    18             if(i%prime[j]==0)  break;
    19         }
    20     }
    21 }
    22 int main()
    23 {
    24     scanf("%lld",&n);
    25     gets();
    26     f[0][0]=1;
    27     for(int i=1;i<=tot;i++)
    28     {
    29         for(int j=0;j<=n;j++)f[i][j]=f[i-1][j];
    30         for(int j=prime[i];j<=n;j*=prime[i])
    31             for(int k=0;k<=n-j;k++)
    32                 f[i][k+j]+=f[i-1][k];
    33     }
    34     for(int i=0;i<=n;i++)ans+=f[tot][i];
    35     printf("%lld
    ",ans);
    36     return 0;
    37 }
     
  • 相关阅读:
    HTML技巧篇:如何让单行文本以及多行文本溢出时显示省略号(…)
    SpringMVC中响应json数据(异步传送)
    如何用Spring框架的<form:form>标签实现REST风格的增删改查操作
    如何使用REST请求风格
    Spring插件的安装与卸载---笔记
    元素 "context:component-scan" 的前缀 "context" 未绑定的解决方案
    简单的文件上传的下载(动态web项目)
    用简单的反射优化代码(动态web项目)
    json数据与Gson工具类的使用
    JSON简介
  • 原文地址:https://www.cnblogs.com/chty/p/5897948.html
Copyright © 2011-2022 走看看