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。
Output
包含一个整数,可能的排数。
Sample Input
【输入样例一】
3【输入样例二】
10Sample Output
【输出样例一】
3【输出样例二】
16【数据规模和约定】
30%的数据,满足 1 <= N <= 10 。
100%的数据,满足 1 <= N <= 1000 。

這是一道數論+記憶化搜索的題目。

遠問題可以轉化為一下問題:
已知a1+a2+a3+...+am = N,求Lcm(a1, a2, a3, ..., am)的所有可能性。

做法如下:枚舉從1到n之間的所有素數,再枚舉每個素數的方冪。由唯一分解定理可知,所枚舉的每一個不同的對象,都對應一個不同的解,再將這些解累加即可。

由於數據較大,必須使用記憶化搜索,並且要用64位整型。
Accode:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using std::cin;
using std::cout;
typedef long long int64;
const int maxN = 1010;
const int maxM = 210;int prime[210];
int64 f[210][1010];
int n;inline void mkprime(int Lim)
{prime[0] = 2; prime[1] = 3; prime[2] = 5;int Last = 7;for (int i = 3; Last <= Lim; ++i, ++Last)for (; ; ++Last){bool flag = true;for (int j = 0; prime[j]* prime[j] <= Last; ++j)if (Last % prime[j] == 0){flag = false;break;}if (flag){prime[i] = Last;break;}}
} //製作一張素數表。int64 Find(int i, int n)
{if (prime[i] == -1 || prime[i] > n)//處理邊界。return f[i][n] = 1;if (f[i][n] > -1) return f[i][n];//記憶化搜索。f[i][n] = 0;for (int tmp = prime[i];tmp <= n; tmp *= prime[i])f[i][n] += Find(i + 1, n - tmp);//該素數被選,則枚舉它的次數。return f[i][n] += Find(i + 1, n);//統計該素數未被選的情況。
}int main()
{freopen("game.in", "r", stdin);freopen("game.out", "w", stdout);cin >> n;memset(f, 0xff, sizeof(f));memset(prime, 0xff, sizeof(prime));mkprime(n);cout << Find(0, n);return 0;
}

第二次做,改进递推版,并且加上就地滚动,速度更快。

#include <fstream>
#include <cstring>
#include <cstdlib>typedef long long int64;
const int maxP = 200;
const int maxN = 1010;int64 f[maxN];
int prime[maxP];
int n, tot;bool is_prime(int x)
{for (int i = 0; prime[i]* prime[i] <= x; ++i)if (x % prime[i] == 0)return false;return true;
}void mkprime()
{prime[0] = 2;for (int i = 3; i < n + 1; ++i)if (is_prime(i))prime[++tot] = i;return;
}int main()
{std::ifstream cin("game.in");cin >> n;cin.close();mkprime();for (int j = 0; j < n + 1; ++j)f[j] = 1;for (int i = 0; i < tot + 1; ++i)for (int j = n; j > -1; --j)for (int k = prime[i];k <= j; k *= prime[i])f[j] += f[j - k];std::ofstream cout("game.out");cout << f[n] << std::endl;cout.close();return 0;
}

【數論】【搜索】【SCOI2009】遊戲相关推荐

  1. Big Data應用:以玩家意見之數據分析來探討何謂健康型線上遊戲(上)

    首先,所有資料都可以從網路上找到,只是我做了一些分析與整理而已.純粹分享心得~~ 最近再做研究的時候我跟我的同事K先生在某次偶然的討論中發現了一件有趣的事情. [疑~~~~~~~新楓之谷的玩家人氣指數 ...

  2. 任天堂新音樂遊戲上市

    在這個假期﹐一些美國家庭將不再像以往那樣圍在鋼琴旁唱歌﹐而是會擺上他們的電視機和遊戲機﹐通過<吉他英雄>(Guitar Hero)和<搖滾樂隊>(Rock Band)這樣的遊戲 ...

  3. [Teaching] [Silverlight] 用 Silverlight 一起開發Kuso小遊戲《捏氣泡》- 設計人員篇

    楔子 當程式人員完成遊戲的骨架後,就交給設計人員,將介面的部分一鼓作氣地製作完成吧! 我們採用的技術平台及工具如下: 1. Silverlight 4 2. Visual Studio 2010 3. ...

  4. [Teaching] [Silverlight] 30秒快速建立遊戲迴圈 (Game Loop)

    如果你想拿Silverlight開發遊戲,不管是在PC上採用Silverlight 3.4,或是Windows phone 7上採用Silverlight for windows phone,都離不開 ...

  5. 遊戲是這樣寫成的 (第三篇: 簡單的遊戲框架)

    遊戲是這樣寫成的 (第三篇: 簡單的遊戲框架) 通過上一篇, 我們已有個基本的畫圖功能, 這次讓我們弄一個簡單的遊戲框架吧! 其實一般的遊戲, 大至有兩個主要的函數就可以了: update 和 ren ...

  6. 一年前寫的:計算所得稅以及計算24點遊戲

    一年多前一個夜裡寫的, 後來花時間做了些注釋. 可以計算出個人所得稅(月收入);根據所得稅推算個人所得;計算24點的小遊戲. 3部分都包含在一個頁面裡面,純html+javascript. 其中個人所 ...

  7. 經典IP華麗回歸,NFT遊戲《開心農場物語》将於2022年5月30日13:30正式公測

    在多年前爆火的游戲IP中,一定有開心網旗下的<開心農場>的一席之地.<開心農場>是由Five Minutes開發機發行,於2008年開布的一款以種植為主的社交網頁游戲,玩家可以 ...

  8. (轉貼) 美電腦工程師改寫遊戲軟體向女友求婚成功 (News)

    Abstract 美國一名電腦程式工程師改寫女友最喜歡的電腦遊戲程式,在遊戲中向女友求婚,結果不僅抱得美人歸,還贏得遊戲發明公司的獎勵. Introduction轉貼自http://news.pcho ...

  9. java实现鼠标宏编程_我應該如何編程高級java遊戲中的鼠標/鍵輸入?

    我是一名自學成才的程序員,所以我不知道正確的做事方式.我製作了諸如小行星和蛇之類的簡單遊戲,但在這些遊戲中,您可以輕鬆修改鍵事件功能中的變量.這裏是我在我的簡單的小行星遊戲做到了:我應該如何編程高級j ...

最新文章

  1. python字符串合并去重_Python合并同类项的字符串,一对多
  2. 【实施工程师】vim命令
  3. Redis中的淘汰策略
  4. unsafehelper java_Java 9中将移除 Sun.misc.Unsafe
  5. mysql时间间隔年份_MySQL DATEDIFF函数获取两个日期的时间间隔的方法
  6. activate tensorflow_“量子固件”来了!利用 TensorFlow 提升量子计算硬件性能
  7. ROS入门-11.客户端Client的编程实现
  8. visual studio code(vscode)的使用(快捷键)
  9. NYOJ 214(二分插入)
  10. hadoop组件中的hive安装
  11. C语言打印ASCII码
  12. 云计算与云原生 — ETCD 数据库完全解析
  13. Python 实现求矩阵的伴随矩阵
  14. WinForm自制水晶按钮
  15. oracle检查表的级联关系,有条件的两个表关联查询为什么会出现 MERGE JOIN CARTESIAN操作...
  16. mysql单表历史记录_Mysql之单表记录查询
  17. 归一化互相关(NCC)及其部分应用场景
  18. 噪声和信噪比的转换(如何在数据集中添加噪声)
  19. 辨别虚假高音质(320k/Ape/Flac)的音乐文件
  20. MSP432学习笔记:ADC14

热门文章

  1. 128、函数接口类---Consumer
  2. 基于SpringBoot调用百度ocr以及企查查接口实现对营业执照信息的提取并识别真伪
  3. 软件缺陷静态分析CodeSonar
  4. 面试准备:逻辑智力题
  5. spring mongodb内嵌文档查询
  6. 10.交换路由基本作用
  7. 手机内存卡丢失数据怎么恢复
  8. 生日快乐,我想念你们
  9. Excel项目管理工具
  10. 2010中国互联网哈哈榜