【置换+DP】BZOJ1025
来源:互联网 发布:学java可以找什么工作 编辑:程序博客网 时间:2024/05/24 06:48
题目链接
这道题题目很长,废话太多。
说白了就是有若干个正整数,它们的和为
把题目看透后,似乎题变简单了。然后一眼就看出是一个DP。
然而蒟蒻还是不会做。动规弱爆了= =
决定最小公倍数的,是这些数的质因数以及对应的幂。
那么首先筛一下素数吧,然后DP。
/************************************************************** Problem: 1025 Time:20 ms Memory:9168 kb****************************************************************/#include <iostream>#include <cstdio>#define MAXN 1005#define LL long long intusing namespace std;bool flag[MAXN];int n, prime[MAXN], cnt;LL f[MAXN][MAXN];void table(int n){ for(int i=2;i<=n;++i) { if(!flag[i])prime[++cnt]=i; for(int j=1;j<=cnt;++j) { if(i*prime[j]>n)break; flag[i*prime[j]]=1; if(i%prime[j]==0)break; } }}int main(){ scanf("%d",&n); table(n); f[0][0]=1; //f[i][j]表示前i个素数的和为j时最小公倍数的个数(当然有一些数木有用)。由于是枚举素数,不存在最小公倍数重复的情况 for(int i=1;i<=cnt;++i) { for(int j=0;j<=n;++j) f[i][j]=f[i-1][j]; for(int k=prime[i];k<=n;k*=prime[i]) for(int j=0;j+prime[i]<=n;++j) f[i][j+k]+=f[i-1][j]; } LL ans=0; //注意:若和没有到达n,就用1来补。 for(int i=0;i<=n;++i) ans+=f[cnt][i]; printf("%lld\n",ans); return 0;}
0 0
- 【置换+DP】BZOJ1025
- [BZOJ1025]SCOI2009游戏|置换的循环|DP
- Bzoj1025:[SCOI2009]游戏:置换群+dp
- bzoj1025[SCOI2009]游戏 DP 置换 筛法
- 【BZOJ1025】[SCOI2009]游戏【计数DP】【质因数分解】【置换】
- [BZOJ1025][SCOI2009]游戏(置换+背包dp+数学相关)
- [BZOJ1025][SCOI2009]游戏 && dp
- 【bzoj1025】【SCOI2009】【游戏】【dp】
- [DP] BZOJ1025: [SCOI2009]游戏
- BZOJ1025 [SCOI2009]游戏(置换+数论+背包)
- bzoj1025 [SCOI2009]游戏(置换+分组背包)
- BZOJ1025
- bzoj1025
- bzoj1025: [SCOI2009]游戏[数学分析+背包dp]
- BZOJ1025(SCOI2009)[游戏]--线性筛+DP
- 置换+DP POJ 3590
- POJ 3590 The shuffle Problem 置换+DP
- UVA 11077 Find the Permutations(置换+dp)
- python:判断一个对象是否可迭代 的方法
- 【JavaScript】学后总结
- Lipshitz Sequence Codeforces Round #333 (Div. 1) B(单调栈)
- 第14周项目5 二叉树排序树中查找的路径
- Jquery库和自己编写的base.js之间的冲突
- 【置换+DP】BZOJ1025
- Linux简单驱动框架
- 多媒体名词介绍
- android sdk content loader 0%不动
- 为ListView添加分段标头
- Android:fragment书上例子详细介绍
- Java EE HTML5 WebSocket 示例
- 第16周项目2-大数据集上排序算法性能的体验
- 反射