Math Magic ZOJ - 3662
核心是要想到只枚举最小公倍数的因子
因为转移过程中一单添加了不是最小公倍数的因子,那么结果必然不合法,虽然最终答案是对的,但是这样的答案根本用不上,反而时间复杂度大大增加
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;
#define endl "\n"
#define me(a,b) memset(a,b,sizeof(a))
const int mod=1e9+;
const int inf=0x3f3f3f3f;
const int maxn=;
int lcm[maxn][maxn];
void prepear() {
for(int i=; i<=; i++)
for(int j=; j<=; j++)
lcm[i][j]=(i*j)/__gcd(i,j);
}
int n,m,k;
int dp[][maxn][maxn];
int factor[],tol;
int main() {
prepear();
while(cin>>n>>m>>k) {
tol=;
for(int i=; i<=m; i++)
if(m%i==)
factor[tol++]=i;
me(dp,);
dp[][][]=;
int dir=;
for(int i=; i<=k; i++) {
dir^=;
me(dp[dir],);
for(int j=i-; j<=n; j++) {
for(int l=; l<=m; l++) {
if(dp[dir^][j][l]!=) {
for(int eu=;eu<tol;eu++){
int v=factor[eu];
if(v+j>n) break;
int nlcm=lcm[l][v];
if(nlcm>m||m%nlcm) continue;
(dp[dir][v+j][nlcm]+=dp[dir^][j][l])%=mod;
}
}
}
}
}
cout<<dp[dir][n][m]<<endl;
}
}
Math Magic ZOJ - 3662的更多相关文章
- UVALive 6073 Math Magic
6073 Math MagicYesterday, my teacher taught us about m ...
- Math Magic(完全背包)
Math Magic Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit Sta ...
- [ZOJ 3662] Math Magic (动态规划+状态压缩)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3662 之前写过这道题,结果被康神吐槽说代码写的挫. 的确,那时候 ...
- ZOJ3662:Math Magic(全然背包)
Yesterday, my teacher taught us about math: +, -, *, /, GCD, LCM... As you know, LCM (Least common m ...
- ZOJ-3662 Math Magic 背包DP
这题不错,可惜我还是太弱了,没想到qwq. 看了网上大佬题解之后写的,对比了一下代码,好像我写的还是挺简洁的(逃,只是吞行比较多). 因为直接用lcm的值做下标会超时,所以我们观察发现可以组成lcm为 ...
- DP(优化) UVALive 6073 Math Magic
/************************************************ * Author :Running_Time * Created Time :2015/10/28 ...
- hdu 4427 Math Magic DP
思路: dp[i][j][k]表示满足前i个数,和为j,lcm为k的数目. 设a为解的第i+1个数. 那么状态转移就为 dp[i+1][j+a][lcm(a,k)]+=dp[i][j][k]. 但是由 ...
- hdu 4427 Math Magic
一个长了一张数学脸的dp!!dp[ i ][ s ][ t ] 表示第 i 个数,sum为 s ,lcm下标为 t 时的个数.显然,一个数的因子的lcm还是这个数的因子,所以我们的第三维用因子下标代替 ...
- zoj 3662 第37届ACM/ICPC长春赛区H题(DP)
题目:给出K个数,使得这K个数的和为N,LCM为M,问有多少种 f[i][j][k]表示选i个数,总和为j,最小公倍数为k memery卡的比较紧,注意不要开太大,按照题目数据开 这种类型的dp也是第 ...
随机推荐
- WebAPI 微信小程序的授权登录以及实现
这个星期最开始 ,老大扔了2个任务过来,这个是其中之一.下面直接说步骤: 1. 查阅微信开发文档 https://developers.weixin.qq.com/miniprogram/dev/ ...
- javascript Worker子线程
main.js code: //创建 var worker = new Worker("./worker.js"); //发送 worker.postMessage(1); //接 ...
- RFC笔记,IPv6 Node Requirements
Request for Comments: 6434,IPv6 Node Requirements 路由器节点必须能够生成链路本地地址 5.9.2. IPv6 Stateless Address Au ...
- Springboot 自动装配置
Spring Boot 相对于传统的Spring引入了自动配置功能,简化了项目中繁琐的配置,让开发者利用起来更加的简便.快捷.比如内嵌的tomcat容器等,这些都属于Spring Boot自动配置的范 ...
- h5笔记2
•离线缓存: html配置manifest属性,cache.manifest是缓存配置文件 <html lang="zh-CN" manifest="cache.m ...
- centos docker redis 安装
1.下载redis镜像 docker pull redis 2.下载redis.conf文件 https://redis.io/topics/config 这边查找自己服务器redis对应的版本文件 ...
- Mysql数据库操作(命令行)
1 环境 树莓派: mysql: 2 指令 以下是从命令行中连接mysql服务器的简单实例: [root@host]# mysql -u root -p Enter password:****** ...
- jmeter脚本调试过程
1.添加监听器:查看结果树,再回放脚本 2.权限验证,例如:cookies a.谷歌浏览器F12获取session
- The server cannot be started because one or more of the ports are invalid. Open the server editor and correct the invalid ports.
在eclipse里运行jsp文件最初迟迟没有反应,重启报了这个错误,tomcat的端口设置有问题.需要打开服务器设置一下端口号. 点击Servers,如果没有这一项,按照Window-Show Vie ...
- Android应用第一次启动时的欢迎界面制作
原理是这样,我们在SharedPreferences中存储一个int型数据,用来代表第几次登录,每次启动时都读取出来判断是不是第一次启动,然后依次判断是否要显示欢迎界面, 具体实现如下: 设置一个欢迎 ...