博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4427 Math Magic
阅读量:4970 次
发布时间:2019-06-12

本文共 1391 字,大约阅读时间需要 4 分钟。

       一个长了一张数学脸的dp!!dp[ i ][ s ][ t ] 表示第 i 个数,sum为 s ,lcm下标为 t 时的个数。显然,一个数的因子的lcm还是这个数的因子,所以我们的第三维用因子下标代替lcm,可以有效的减少枚举量。

 

#include
#include
#include
#include
#include
#include
#include
#define LL long long#define CLR(a, b) memset(a, b, sizeof(a))using namespace std;const int N = 1010;const int MOD = 1e9 + 7;int k, num, m;int dp[2][N][40];int ok[N], f[N][N];int gcd(int a, int b){    return b ? gcd(b, a % b) : a;}int lcm(int a, int b){    return a / gcd(a, b) * b;}int main(){    //freopen("input.txt", "r", stdin);    int n, i, j, s, t,  tmd = 0;    while(scanf("%d%d%d", &n, &m, &k) != EOF)    {        CLR(dp, 0);num = 0;        for(i = 1; i <= m; i ++)        {            if(m % i == 0) ok[num ++] = i;        }//num不超过32        for(i = 0; i < num; i ++)        {            for(j = 0; j < num; j ++)            {                t = lcm(ok[i], ok[j]);                for(s = 0; s < num; s ++)                {                    if(ok[s] == t)                    {                        f[i][j] = s;                        break;                    }                }            }        }        for(j = 0; j < num; j ++)        {            dp[0][ok[j]][j] = 1;        }        for(i = 1; i < k; i ++)        {            for(s = 0; s <= n; s ++)//一定记得初始化            {                for(t = 0; t < num; t ++)                {                    dp[i & 1][s][t] = 0;                }            }            for(j = 0; j < num; j ++)            {                for(s = i; s <= n - (k - i - 1) - ok[j]; s ++)                {                    for(t = 0; t < num; t ++)                    {                        dp[i&1][s+ok[j]][f[t][j]]= (dp[i&1][s+ok[j]][f[t][j]]+dp[1-(i&1)][s][t]) % MOD;                    }                }            }        }        printf("%d\n", dp[(k - 1) & 1][n][num - 1]);    }    return 0;}

 

 

 

转载于:https://www.cnblogs.com/suncoolcat/p/3339668.html

你可能感兴趣的文章
Xcode 5.1.1 与 Xcode 6.0.1 共存
查看>>
窥探 kernel --- 进程调度的目标,nice值,静态优先级,动态优先级,实时优先级...
查看>>
使用bootstrap table时不能显示筛选列和分页每页显示的行数
查看>>
利用php cookie实现浏览历史功能
查看>>
机器学习:R语言中如何使用最小二乘法
查看>>
神兽保佑-代码无BUG
查看>>
写在学习Java GUI之前
查看>>
词型还原
查看>>
竖式问题
查看>>
IE6兼容png24透明滤镜写法图片路径是以页面为基点
查看>>
判断一个整数是否为4的倍数?
查看>>
视频测试序列的下载地址【转】
查看>>
2018.06.26 NOIP模拟 号码(数位dp)
查看>>
2019.01.20 bzoj3784: 树上的路径(二分答案+点分治)
查看>>
codeforces div 313
查看>>
四则运算缓冲流
查看>>
MySQL中间件之ProxySQL(8):SQL语句的重写规则
查看>>
Perl数据序列化和持久化(入门):Storable模块
查看>>
log4j中存在日志无法打印问题解决
查看>>
Netty中的Channel之数据冲刷与线程安全(writeAndFlush)
查看>>