/************************************************
* Author        :Running_Time
* Created Time  :2015/10/28 星期三 20:20:09
* File Name     :H.cpp************************************************/#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e3 + 10;
const int M = 1e2 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-10;
const double PI = acos (-1.0);
int dp[2][N][N];
int lcm[N][N];
int vec[N];int GCD(int a, int b)   {return b ? GCD (b, a % b) : a;
}void init(void) {for (int i=1; i<=1000; ++i) {for (int j=1; j<=1000; ++j) {lcm[i][j] = i * j / GCD (i, j);}}
}inline void add(int &x, int y)   {x += y;if (x > MOD)    x -= MOD;
}int main(void)    {init ();int n, m, k;while (scanf ("%d%d%d", &n, &m, &k) == 3)   {int t = 0;for (int i=1; i<=m; ++i)    {if (m % i == 0) vec[t++] = i;}int now = 0;for (int i=0; i<=n; ++i)    {for (int j=0; j<t; ++j) {dp[now][i][vec[j]] = 0;}}dp[now][0][1] = 1;for (int l=1; l<=k; ++l)    {now ^= 1;for (int i=0; i<=n; ++i)    {for (int j=0; j<t; ++j) {dp[now][i][vec[j]] = 0;}}for (int i=l-1; i<=n; ++i)  {for (int j=0; j<t; ++j) {if (dp[now^1][i][vec[j]] == 0)   continue;for (int p=0; p<t; ++p) {int x = i + vec[p];int y = lcm[vec[j]][vec[p]];if (x > n || m % y != 0)    continue;dp[now][x][y] = (dp[now][x][y] + dp[now^1][i][vec[j]]) % MOD;}}}}printf ("%d\n", dp[now][n][m]);}//cout << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";return 0;
}

  

转载于:https://www.cnblogs.com/Running-Time/p/4918649.html

DP(优化) UVALive 6073 Math Magic相关推荐

  1. hdu3585 二分最大团(dp优化)

    题意       给你一些点( <= 50),让你找到k个点,使得他们之间的最小距离最大. 思路:       求最小的最大,我们可以直接二分去枚举距离,但是要注意,不要去二分double找距离 ...

  2. hdu1505 暴力或dp优化

    题意:        给你一个矩阵,让你在里面找到一个最大的f矩阵.. 思路:       三种方法ac这到题目;  方法(1) 以宽为主,暴力    开一个数组sum[i][j],记录当前这个位置的 ...

  3. [DP优化之平行四边形不等式]例题

    目录 概述 例题 Post Office 题目描述 解题思路 总结 Monkey Party 题目链接 解题思路 总结 评述 概述 首先说明一点,这种方法不是什么题都可以用的,我们要判断DP的情况,看 ...

  4. [BZOJ1499][NOI2005][DP+优化]瑰丽华尔兹

    [Problem Description] 你跳过华尔兹吗?当音乐响起,当你随着旋律滑动舞步,是不是有一种漫步仙境的惬意?众所周知,跳华尔兹时,最重要的是有好的音乐.但是很少有几个人知道,世界上最伟大 ...

  5. C++剑指offer:解题报告之DP优化学习记 (二) ——浅论DP斜率优化 (Print Article 【HDU - 3507】 )

    链接:https://share.weiyun.com/5LzbzAc 目录 前言 斜率优化前期准备 1.从状态转移方程出发 2.推理状态转移方程 对结论的进一步推导 干货!综合结论 判断斜率大小的方 ...

  6. Coins(多重背包方案可行性dp + 优化)

    Coins 题目 给出硬币面额及每种硬币的个数,求从1到m能凑出面额的个数. 思路 1.朴素的多重背包 题面给出的很明显的多重背包,定义dp为考虑前i种硬币,能凑出j元的方案可行性,可以得到第一版代码 ...

  7. 01背包问题dp优化

    背包容量m给定,选择n件物品,求放入背包的最大价值. 其中,物品只能选择一次,要么放,要么不放. 朴素解法 经典的DP问题 状态:f[i][j]f[i][j]f[i][j]表示选择前iii个物品,背包 ...

  8. 【DP优化】【P1430】序列取数

    传送门 Description 给定一个长为n的整数序列,由A和B轮流取数(A先取).每个人可从序列的左端或右端取若干个数(至少一个),但不能两端都取.所有数都被取走后,两人分别统计所取数的和作为各自 ...

  9. 2021牛客暑期多校训练营1 I-Increasing Subsequence(期望dp+优化)

    I-Increasing Subsequence fi,j,0/1f_{i,j,0/1}fi,j,0/1​表示上一轮第一个人选了iii,第二个人选了jjj,并且当前是第1/2个人选择的概率. 转移考虑 ...

最新文章

  1. RHEL6 64位系统安装ORACLE 10g 64bit 数据库
  2. 51nod 1065 最小正字段和 解决办法:set存前缀和,二分插入和二分查找
  3. MYSQL基础--学习笔记
  4. Qt Creator使用自定义着色器
  5. JVM调优总结(一)
  6. spring api层打包_Spring项目的按层打包已过时
  7. C++primer 第 5 章语句 5.2语句作用域 5.3条件语句 5 . 4 迭代语句 5.5跳转语句 5.6 try语句块和异常处理
  8. android 开源 数据库,Android开源数据库框架-LitePal的使用
  9. 浏览器插件----神奇的鼠标
  10. Java 帝国对 Python 的渗透能成功吗?
  11. perl 循环删除指定文件夹下所有满足条件的文件,不包含文件夹
  12. java框架--springmvc --ajax-json-upload/download+maven+ DES/MD5 请求加密
  13. mysql+mmm+主动模式_MySQL集群搭建(4)-MMM+LVS+Keepalived
  14. 河流干涸的原因可能是水循环被破坏
  15. 计算机联锁静态数据表,计算机联锁功能.doc
  16. TeX Live安装教程
  17. 【经验分享】用PS如何将图片的四角做成圆弧角
  18. 如何批量生成ISBN条码
  19. 全网最全实战注册苹果开发者账号教程
  20. 亿速云服务器清理,如何清理docker产生的垃圾文件

热门文章

  1. rip协议的V1和V2的更新机制
  2. Top10 Web2.0在线生成器
  3. 思科路由器全局、接口、协议调试(下)
  4. intellij运行多个工程
  5. flask的上下文的机理与应用(转载+整理)
  6. matlab正余弦画心形图案
  7. ubuntu16.04右键没有终端的问题
  8. C++自定义改进alph均值滤波
  9. 数据结构:静态查找动态查找
  10. vs 无法解析变量$_C语言新手常见错误(Vs使用,语法...),绝对直击痛点