*HDU 4427 - Math Magic(dp)
来源:互联网 发布:php获取ip地理位置 编辑:程序博客网 时间:2024/06/08 10:33
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=4427
题意:
k个数的和为n,最小公倍数为m,求出k个数的序列有多少种(顺序不同算不同)
思路:
dp【i】【j】【k】:前k个数和为j lcm为k的方案数。
第一维使用滚动数组才不会爆内存,先将1000以内两数的lcm预处理,记录m的约数。
m的约数与约数的lcm也是m的约数。
AC.
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int mod = 1e9+7;int dp[2][1005][1005];int yue[105];int lc[1005][1005];int n, m, k, cnt;int gcd(int a, int b){ return b == 0? a: gcd(b, a%b);}int lcm(int a, int b){ return a*b/gcd(a, b);}int main(){ //freopen("in", "r", stdin); for(int i = 1; i <= 1000; ++i) { for(int j = i; j <= 1000; ++j) { lc[i][j] = lc[j][i] = lcm(i, j); } } while(~scanf("%d%d%d", &n, &m, &k)) { cnt = 0; for(int i = 1; i <= m; ++i) { if(m%i == 0) yue[cnt++] = i; } memset(dp, 0, sizeof(dp)); int v = 0; for(int i = 0; i < cnt; ++i) { dp[v][yue[i]][yue[i]] = 1; } for(int i = 1; i < k; ++i) { for(int ii = 1; ii <= n; ++ii) { for(int jj = 0; jj < cnt; ++jj) { dp[v^1][ii][yue[jj]] = 0; } } for(int s = i; s <= n; ++s) { for(int j = 0; j < cnt; ++j) { if(dp[v][s][yue[j]] == 0) continue; for(int c = 0; c < cnt; ++c) { if(s + yue[c] > n) break; dp[v^1][s+yue[c]][lc[yue[c]][yue[j]]] = (dp[v^1][s+yue[c]][lc[yue[c]][yue[j]]]+dp[v][s][yue[j]])%mod; } } } v = v^1; } printf("%d\n", dp[v][n][m]); } return 0;}
0 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长春)
- Android Asynctask
- WXHL 学习文章连载 (十)
- codefroces round 320 div2 题解
- Android studio改变字体大小
- Eclipse常用快捷键
- *HDU 4427 - Math Magic(dp)
- ReactiveCocoa与Functional Reactive Programming
- js之location对象
- 二叉树的遍历-递归与非递归 - 海子
- 使用oracle遇到的相关函数
- Spark学习笔记之-Spark-Standalone下driver和executor分配
- git学习总结(三)
- 说说ReactiveCocoa 2
- ANSI-X99MAC算法和PBOC的3DES MAC算法,附DES算法工具