思路:

dp[i][j][k]表示满足前i个数,和为j,lcm为k的数目。

设a为解的第i+1个数。
那么状态转移就为
dp[i+1][j+a][lcm(a,k)]+=dp[i][j][k]。

但是由于三维开不了,所以用滚动数组。

代码如下:

 #include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define pi acos(-1.0)
#define MAX 1001
#define M 1000000007
using namespace std;
int num[MAX],LCM[MAX][MAX],dp[][MAX][MAX],cnt;
int gcd(int a,int b)
{
while(b){
int t=a;
a=b;
b=t%b;
}
return a;
}
int lcm(int a,int b)
{
return a/gcd(a,b)*b;
}
void init()//预处理出lcm
{
int i,j;
for(i=;i<MAX;i++){
LCM[i][i]=i;
for(j=;j<i;j++)
LCM[j][i]=LCM[i][j]=lcm(i,j);
}
}
int main(){
int t,n,m,k,i,j,now,v;
init();
while(scanf("%d%d%d",&n,&m,&k)!=EOF){
cnt=;
for(i=;i<=m;i++)
if(m%i==)
num[cnt++]=i;
now=;
for(i=;i<=n;i++)//不要用memset
for(j=;j<cnt;j++)
dp[now][i][num[j]]=;
dp[now][][]=;
for(t=;t<=k;t++){
now^=;
for(i=;i<=n;i++)//不要用memset
for(j=;j<cnt;j++)
dp[now][i][num[j]]=;
for(i=t-;i<=n;i++){
for(j=;j<cnt;j++){
if(dp[now^][i][num[j]]==) continue;
for(v=;v<cnt;v++){
int s=i+num[v];
int l=LCM[num[j]][num[v]];
if(s>n||m%l!=) continue;
dp[now][s][l]+=dp[now^][i][num[j]];
dp[now][s][l]%=M;
}
}
}
}
printf("%d\n",dp[now][n][m]);
}
return ;
}

hdu 4427 Math Magic DP的更多相关文章

  1. hdu 4427 Math Magic

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

  2. UVALive 6073 Math Magic

                                                  6073 Math MagicYesterday, my teacher taught us about m ...

  3. hdu 3183 A Magic Lamp RMQ ST 坐标最小值

    hdu 3183 A Magic Lamp RMQ ST 坐标最小值 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 题目大意: 从给定的串中挑 ...

  4. Math Magic(完全背包)

    Math Magic Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Sta ...

  5. hdu 3183 A Magic Lamp(RMQ)

    题目链接:hdu 3183 A Magic Lamp 题目大意:给定一个字符串,然后最多删除K个.使得剩下的组成的数值最小. 解题思路:问题等价与取N-M个数.每次取的时候保证后面能取的个数足够,而且 ...

  6. HDU 1011 树形背包(DP) Starship Troopers

    题目链接:  HDU 1011 树形背包(DP) Starship Troopers 题意:  地图中有一些房间, 每个房间有一定的bugs和得到brains的可能性值, 一个人带领m支军队从入口(房 ...

  7. hdu 2296 aC自动机+dp(得到价值最大的字符串)

    Ring Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. HDU 4778 状压DP

    一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...

  9. HDU 3183.A Magic Lamp-区间找最小值-RMQ(ST)

    A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

随机推荐

  1. 《shell脚本if..then..elif..then.if语句的总结》

    第一种: #!/bin/bash service vsftpd start &> /dev/null if [ $? -eq 0 ] then echo "ftp is sta ...

  2. DTCMS列表页自定义参数。

    1.频道管理中,URL配置,增加一个参数person_id 2.在photo_list.html模板页中,添加以下代码 <!--C#代码--> <%csharp%> strin ...

  3. VirtrualBox 搭建本地lamp环境

    1.VirtrualBox安装Centos6.8 minimal VirtrualBox新建个虚拟机配置好内存以及硬盘大小,安装即可: 网络方式是 NAT(默认)和桥接方式来实现,最好在安装前设置好, ...

  4. How to achieve dialog with lookup control

    How to create a dialog with the lookup as a control, the other control SalesId ItemId lookup is the ...

  5. WPF 实现QQ抖动

    //wpf中实现类似于qq的抖动窗效果 //前段页面 <Window x:Class="WpfApplication4.MainWindow" xmlns="htt ...

  6. hdu 5755 2016 Multi-University Training Contest 3 Gambler Bo 高斯消元模3同余方程

    http://acm.hdu.edu.cn/showproblem.php?pid=5755 题意:一个N*M的矩阵,改变一个格子,本身+2,四周+1.同时mod 3;问操作多少次,矩阵变为全0.输出 ...

  7. SQLite清空表并将自增列归零[转]

    SQL标准中有 WHERE name = 'TableName'; 也可以直接把该记录删掉: 1 DELETE FROM sqlite_sequence WHERE name = 'TableName ...

  8. oracle 外部表

    CREATE TABLE "EXT_ENTRY_WORKFLOW" ( ), ), "CREATE_DATE" DATE, ), ), ), ), ), ), ...

  9. Java Day 01

    2-19交互方式 GUI Graphical User Interface CLI Command Line Interface JavaEE Enterprise Edition 13种技术 Jav ...

  10. How to: Add Missing ContentPlaceHolder

    In Microsoft SharePoint Server 2010, the BlueBand master page is not supported in the Search Center ...