*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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 喝酒后反胃想吐怎么办 拔牙后反胃想吐怎么办 健身完恶心想吐怎么办 锻炼后头晕想吐怎么办 高三学生睡眠不好怎么办 狗狗精力太旺盛怎么办 新入职的同事比你厉害怎么办 银子弹鞋开胶了怎么办 我很笨脑子反应慢怎么办 学车脑子不好使怎么办 生完二胎脑子不好使怎么办 羽毛球鞋买小了怎么办 羽毛球鞋买大了怎么办 感觉自己脑子越来越笨了怎么办? 生完孩子后身体素质差怎么办 胃口太好越来越胖怎么办 心情一紧张心跳手抖怎么办 消防兵新兵连俯卧撑不够怎么办 cf枪王永久禁赛怎么办 换了手机号花呗怎么办 xp系统无限重启怎么办 魔域配置资源读取错误怎么办 魔域异地交易了怎么办 魔域手游宝宝亲密度不够怎么办 魔域手游怎么改密码忘了怎么办 魔域装备注灵怎么办 lol外服账号忘记了怎么办 美服lol下载慢怎么办 台服天堂2延迟怎么办 梦幻专用瑞兽没有泰山怎么办 冲错了游戏点券怎么办 新手玩联盟很菜怎么办 cf玩一会儿卡退怎么办 魔域先锋区封号了怎么办 吃了减肥药头疼怎么办 冬天没用完的霜怎么办 手表带起来大了怎么办 碰到舞警打人该怎么办 合租者偷了东西却没有证据怎么办 钥匙锁在房间了怎么办 家里门钥匙丢了怎么办