hdu 4427 Math Magic(DP)
来源:互联网 发布:学编程还是网页设计好 编辑:程序博客网 时间:2024/05/19 09:41
题意:给出k个数的和n,它们的最小公倍数m,求有多少种数的排列满足要求。
思路:开始还以为是数学题,没想到是dp……第二次因为用了long long超时了,也可能是我写的效率比较低吧。。。用dp[i][j][k]表示前i个数的和是j,最小公倍数是k的种数,状态转移方程也不是很难想,枚举一下m的因子就好了。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<map>#include<queue>#include<set>#include<stack>#include<cmath>#include<vector>#define inf 0x3f3f3f3f#define Inf 0x3FFFFFFFFFFFFFFFLL#define eps 1e-9#define pi acos(-1.0)using namespace std;typedef long long ll;const int maxn=1000+10;const int mod=1000000000+7;int dp[2][maxn][40];int a[40],conv[maxn],b[40][40];int n,m,k,cnt;int gcd(int a,int b){ int c; while(b!=0) { c=a%b; a=b; b=c; } return a;}int lcm(int a,int b){ return a*b/gcd(a,b);}void Init(){ memset(dp,0,sizeof(dp)); memset(conv,0xff,sizeof(conv)); cnt=0; for(int i=1;i<=m;++i) { if(m%i==0) { a[cnt]=i; conv[i]=cnt++; } } int tmp; for(int i=0;i<cnt;++i) for(int j=0;j<cnt;++j) { tmp=lcm(a[i],a[j]); if(tmp<=m&&conv[tmp]!=-1) b[i][j]=conv[tmp]; }}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while(~scanf("%d%d%d",&n,&m,&k)) { Init(); for(int i=0;i<cnt;++i) dp[1][a[i]][i]=1; int wh,tmp; for(int i=2;i<=k;++i) { wh=i&1; for(int j=0;j<=n;++j) for(int z=0;z<cnt;++z) dp[wh][j][z]=0; for(int j=i;j<=n;++j) { for(int z=0;z<cnt;++z) { if(j<a[z]) break; for(int u=0;u<cnt;++u) { tmp=b[z][u]; dp[wh][j][tmp]+=dp[wh^1][j-a[z]][u]%mod; dp[wh][j][tmp]%=mod; } } } } printf("%d\n",dp[k&1][n][conv[m]]%mod); } return 0;}
- dp hdu-4427-Math Magic
- hdu 4427 Math Magic(DP)
- hdu 4427 Math Magic dp
- *HDU 4427 - Math Magic(dp)
- 【DP】 HDU 4427 Math Magic
- Math Magic hdu 4427 (dp)
- HDU 4427 Math Magic(DP)
- hdu 4427 Math Magic(DP,4级)
- HDU 4427 Math Magic(三维dp)
- HDU 4427 Math Magic【DP+滚动数组】
- hdu 4427 Math Magic
- hdu 4427 Math Magic
- HDU 4427 Math Magic
- hdu 4427 Math Magic
- hdu 4427 Math Magic(简单DP注意细节)
- HDU 4427 Math Magic【dp+优化+滚动数组】【好题】
- HDU 4427 Math Magic (2012长春-dp )
- HDU 4427 Math Magic (优化DP,ICPC2012长春)
- Hadoop 任务调度分析启动篇
- SGU 532 Building Foundation(枚举)
- OpenCV检测运动物体的基础_特征提取
- Toll-free bridging介绍
- Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
- hdu 4427 Math Magic(DP)
- ZOJ 3278: 8G Island
- 如何查看linux系统中linux,apache,nginx,mysql,php版本
- 8×8棋盘 源代码
- Linux就是这个范儿之第一次亲密接触(1)
- 我对职业规划和未来发展的一些思考
- Mysql:is not allowed to connect to this MySQL server
- V4L2编程
- Objective-C学习笔记(二)–Category和Extension