hdu 4658 Integer Partition(公式)
来源:互联网 发布:协同过滤推荐算法 编辑:程序博客网 时间:2024/05/04 14:41
题目链接:hdu 4658 Integer Partition
代码
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 1e5 + 5;const int mod = 1e9 + 7;int f[maxn];void init () { f[0] = 1; for (int i = 1; i <= maxn; i++) { int bit = 1; for (int j = 1; j <= i; j++) { int v1 = i - j * (3 * j - 1) / 2; int v2 = i - j * (3 * j + 1) / 2; if (v1 < 0 && v2 < 0) break; if (v1 >= 0) f[i] = (f[i] + bit * f[v1]) % mod; if (v2 >= 0) f[i] = (f[i] + bit * f[v2]) % mod; bit *= -1; } f[i] = (f[i] + mod) % mod; }}int solve(int n, int k) { int ret = f[n], sig = -1; for (int i = 1; ; i++) { int v1 = k * i * (3 * i - 1) / 2; int v2 = k * i * (3 * i + 1) / 2; if (v1 > n && v2 > n) break; if (v1 <= n) ret = (ret + sig * f[n-v1]) % mod; if (v2 <= n) ret = (ret + sig * f[n-v2]) % mod; sig *= -1; } return (ret + mod) % mod;}int main () { init(); int cas, n, k; scanf("%d", &cas); while (cas--) { scanf("%d%d", &n, &k); printf("%d\n", solve(n, k)); } return 0;}
0 0
- hdu 4658 Integer Partition(公式)
- HDU 4658 Integer Partition
- hdu 4658Integer Partition
- hdu 4658 Integer Partition
- HDU 4658 Integer Partition
- HDU-4658-Integer Partition
- hdu 4651 Partition(公式)
- hdu 4658 Integer Partition(整数拆分变形)
- 2013 多校第六场 hdu 4658 Integer Partition(五边形数定理,整数划分)
- hdu 4658 Integer Partition 整数划分+生成函数
- 【HDU】4658 Integer Partition【生成函数——数拆分】
- hdu 4651 Partition 整数划分+公式
- 【公式题】HDU 4651—— Partition
- Integer Partition
- HDU 4658 2013 多校联合赛第6场 Integer Partition
- 整数划分 Integer Partition(一)
- hdu4602 - Partition(公式推导)
- HDOJ 4658 Integer Partition(整数划分:母函数+五边形数定理)
- Libev源码分析06:异步信号同步化--sigwait、sigwaitinfo、sigtimedwait和signalfd
- SDUT 3115 查找一个数中素数的种类数
- c++实现链表反转
- 汇编语言 用户名密码登录验证程序 (dos调用)
- HDU 5532 Almost Sorted Array
- hdu 4658 Integer Partition(公式)
- 怎么用bsdsocket搭建一个面对多人的服务器
- Swift -- 属性
- R语言中筛选匹配数据
- Gradle 修改 Maven 仓库地址
- 创建的Android avd只有屏幕,没有返回等操作键
- lightoj 1369 - Answering Queries 【思维】
- android stuido离线更新的两种方式(亲测可用)
- 找出一串字符里出现次数最多的字符