BZOJ1025
来源:互联网 发布:日语自学软件 编辑:程序博客网 时间:2024/06/05 09:14
传送门:BZOJ1025
首先,容易证明解的存在性。
于是排数就等于1回到1,2回到2…所需步数的lcm。
然后,容易发现
其中i取一类步数为b(i)的i,i’,i”…
于是问题变成已知k个正整数的和为n,求这k个数可能的lcm的种数。
套一个Lagrange唯一分解定理即可。
代码上的小细节见下。
#include <cstdio>#include <cstdlib>#include <cmath>#include <cstring>#include <algorithm>#include <iostream>using namespace std;bool used[1005];int prime[1005];int num,n;long long f[1005][1005];void Make_Table(int a){ memset(used,false,sizeof(used)); for(int i=2;i<=a;i++){ if(!used[i]) prime[++num]=i; for(int j=1;j<=num&&prime[j]*i<=a;j++){ used[prime[j]*i]=true; if(i%prime[j]==0) break; } }}void Solve(){ f[0][0]=1; for(int i=1;i<=num;i++){ for(int j=0;j<=n;j++) f[i][j]=f[i-1][j]; for(int j=prime[i];j<=n;j*=prime[i]) for(int k=0;k<=n-j;k++) f[i][k+j]+=f[i-1][k]; } long long ans=0; for(int i=0;i<=n;i++) ans+=f[num][i]; cout<<ans;}void Readdata(){ freopen("loli.in","r",stdin); scanf("%d",&n);}void Close(){ fclose(stdin); fclose(stdout);}int main(){ Readdata(); Make_Table(n); Solve(); Close(); return 0;}
0 0
- BZOJ1025
- bzoj1025
- BZOJ1025: [SCOI2009]游戏
- BZOJ1025 [SCOI2009]游戏
- [BZOJ1025][SCOI2009]游戏 && dp
- 【bzoj1025】【SCOI2009】【游戏】【dp】
- [BZOJ1025][SCOI2009]游戏
- BZOJ1025 SCOI2009游戏
- BZOJ1025[SCOI]游戏
- BZOJ1025[SCOI2009]游戏
- 【置换+DP】BZOJ1025
- BZOJ1025: [SCOI2009]游戏
- bzoj1025: [SCOI2009]游戏
- 【bzoj1025】[SCOI2009]游戏
- [DP] BZOJ1025: [SCOI2009]游戏
- bzoj1025 [SCOI2009]游戏
- bzoj1025 [SCOI2009]游戏
- BZOJ1025: [SCOI2009]游戏
- hdoj1285 确定比赛名次(topo序列)模板
- UVa 11582 Colossal Fibonacci Numbers! 【大数幂取模】
- request对象的几个常用方法
- HDU 4324-- Triangle LOVE【拓扑排序 && 邻接表实现】
- 集团信息化之路 生产型企业的电商之路,ERP+电商平台或许是一种新趋势
- BZOJ1025
- JQuery事件处理,事件委派,事件切换
- Windows 上使用cmake
- POJ 3680 Intervals 费用流+离散化
- Jdbc访问数据库
- Fragment的创建、动态绑定、静态绑定
- 多线程八 生产者消费者经典问题
- EEPlat的图表功能
- Firefox插件开发-入门篇