题目链接:https://cn.vjudge.net/problem/HYSBZ-1263 题目大意:中文题目 具体思路:先进了能的拆成3,如果当前剩下的是4,就先不减去3,直接乘4,如果还剩2的话,也乘2. 如果当n==4的时候,我们将n拆成2*2.如果当n>=5的时候,如果按照4拆的话,显然不如3*2的数大. AC代码: #include<iostream> #include<stack> #include<stdio.h> #include<cstri…
计算n! #include<cstring> #include<cstdio> using namespace std; ]; int main() { int n; while(~scanf("%d",&n)) { memset(num,,sizeof(num)); ; num[] = ; ; i <= n; i++){ ; j <= len; j++){ num[j] = num[j]*i; } ; j <= len; j++){…
1023 Have Fun with Numbers (20)(20 分) Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exac…
yy一下发现好像越小越好...分解成3*3*3*3……这种形式是最好的...然后就是高精度了 --------------------------------------------------------------------------------- #include<bits/stdc++.h>   using namespace std;   struct INT { static const int MAXN = 8000; int s[MAXN], N; INT(int _N =…
Description: \(1<=n,k<=1e5,mod~1e9+7\) 题解: 考虑最经典的排列dp,每次插入第\(i\)大的数,那么可以增加的逆序对个数是\(0-i-1\). 不难得到生成函数: \(Ans=\prod_{i=0}^{n-1}(\sum_{j=0}^ix^j)[x^k]\) \(=\prod_{i=1}^{n}{1-x^i\over 1-x}[x^k]\) 分母是一个经典的生成函数: \({1\over 1-x}^n=(\sum_{i>=0}x^i)^n=\sum…
题目:http://noi.ac/problem/31 模拟 kruscal 的建最小生成树的过程,我们应该把树边一条一条加进去:在加下一条之前先把权值在这一条到下一条的之间的那些边都连上.连的时候要保证图的连通性不变. 已经加了一些树边之后,图的连通性是怎样的呢?这可以是一个整数划分的问题.据说方案只有4万多,所以可以搜一下,搜出有 k 个连通块的方案数. 为了转移和转移时算方案数,还要记录每个方案的:各个连通块的点数,所有的空位(可放边)数. 可以用 map 来存状态. map 的角标是一个…
1201 整数划分 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 将N分为若干个不同整数的和,有多少种不同的划分方式,例如:n = 6,{6} {1,5} {2,4} {1,2,3},共4种.由于数据较大,输出Mod 10^9 + 7的结果即可.   Input 输入1个数N(1 <= N <= 50000). Output 输出划分的数量Mod 10^9 + 7. Input示例 6 Output示例 4 分析:这题关键在于不同的整数一个包含数字最多的划…
话说今天百度面试,可能是由于我表现的不太好,面试官显得有点不耐烦,说话的语气也很具有嘲讽的意思,搞得我有点不爽.Whatever,面试中有问到整数划分问题,回答这个问题过程中被面试官搞的不胜其烦,最后也给出了其动态规划的算法,但是显然,醉翁之意不在动态规划而在于生成函数(generating function).下面开始吧:   参考:http://www.skymoon.biz/?p=192  (问题定义以及动态规划)          http://www.artofproblemsolvi…
1263: [SCOI2006]整数划分 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 677  Solved: 332[Submit][Status] Description 从文件中读入一个正整数n(10≤n≤31000).要求将n写成若干个正整数之和,并且使这些正整数的乘积最大. 例如,n=13,则当n表示为4+3+3+3(或2+2+3+3+3)时,乘积=108为最大. Input 只有一个正整数: n (10≤n≤31000) Output…
整数划分问题 整数划分是一个经典的问题. Input 每组输入是两个整数n和k.(1 <= n <= 50, 1 <= k <= n) Output 对于每组输入,请输出六行.              第一行: 将n划分成若干正整数之和的划分数.              第二行: 将n划分成k个正整数之和的划分数.               第三行: 将n划分成最大数不超过k的划分数.              第四行: 将n划分成若干奇正整数之和的划分数.         …
整数划分变形,由2^k组成. 整数划分中一个节约内存的技巧,平时我们使用dp[i][j]维护用不大于j的数组合成i的方案数,所以必须dp[i-j][j]->dp[i][j].这样就需要二位,如果用一维dp[i-j]->dp[i]就会导致重复选取的情况.其原因在于dp[i-j]在计算的过程已经把大于j的组合求完了,就会重复.那么很自然地想到把j地遍历放在外面,这样每次求解的时候,dp[i-j]必然只求解了小于等于j的情况. #include <iostream> #include &…
poj1664放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33661   Accepted: 20824 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 <= t <= 20).以下每行均包含二个整数M和N,以空格分开.1<=M,N<=10. O…
1350: To Add Which? Submit Page    Summary    Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 303     Solved: 134 Description There is an integer sequence with N integers. You can use 1 unit of cost to increase any integer in the sequence b…
整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,  其中n1≥n2≥…≥nk≥1,k≥1.  正整数n的这种表示称为正整数n的划分.求正整数n的不  同划分个数.  例如正整数6有如下11种不同的划分:  6:  5+1:  4+2,4+1+1:  3+3,3+2+1,3+1+1+1:  2+2+2,2+2+1+1,2+1+1+1+1:  1+1+1+1+1+1. 输入 第一行是测试数据的数目…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1028 整数划分,每个数可以用无限次: 所以构造 f(x) = (1+x+x2+x3+...)(1+x2+x4+...)(1+x3+x6+...)...(1+xn) 乘起来后的 xn 的系数就是方案数: 用两个数组做即可,从第一个括号开始一个一个乘,f[i] 表示此时 xi 项的系数,后面每乘过来一个括号,相当于多了一种转移,所以加上. 代码如下: #include<iostream> #include…
http://acm.hdu.edu.cn/showproblem.php?pid=5230 把题目简化后,就是求 1---n - 1这些数字中,将其进行整数划分,其中整数划分中不能有重复的数字,如果有这样的划分并且那个数字在[L, R]区间中,那么就算做一个贡献. 以前的整数划分,一般就是dp[i][j]表示i这个数字,最小的拆分数是j的时候,拥有的方案数,可以控制其没有重复数字,但是空间复杂度太大. 用一种新的方法 dp[i][j]表示j这个数字,当前的拆分拥有i个拆分数时的方案数.至于为什…
整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1. 正整数n的这种表示称为正整数n的划分.求正整数n的不 同划分个数. 例如正整数6有如下11种不同的划分: 6: 5+1: 4+2,4+1+1: 3+3,3+2+1,3+1+1+1: 2+2+2,2+2+1+1,2+1+1+1+1: 1+1+1+1+1+1.   输入 第一行是测试数据的数目M(1<=M<…
整数划分(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 把一个正整数m分成n个正整数的和,有多少种分法? 例:把5分成3个正正数的和,有两种分法: 1 1 3 1 2 2   输入 第一行是一个整数T表示共有T组测试数据(T<=50)每组测试数据都是两个正整数m,n,其中(1<=n<=m<=100),分别表示要拆分的正数和拆分的正整数的个数. 输出 输出拆分的方法的数目. 样例输入 2 5 2 5 3 样例输出 2 2 来源 [张云聪]原创…
L2-002. 链表去重 给定一个带整数键值的单链表L,本题要求你编写程序,删除那些键值的绝对值有重复的结点.即对任意键值K,只有键值或其绝对值等于K的第一个结点可以被保留.同时,所有被删除的结点必须被保存在另外一个链表中.例如:另L为21→-15→-15→-7→15,则你必须输出去重后的链表21→-15→-7.以及被删除的链表-15→15.[删除后的节点全部接到一个新的链表里] 输入格式: 输入第一行包含链表第一个结点的地址.以及结点个数N(<= 105 的正整数)[数据范围不大,可以考虑用结…
L2-012. 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x and y are siblings”:x和y是兄弟结点: “x is the parent of y”:x是y的父结点: “x is a child of y”:x是y的一个子结点. (仔细观察,发现只有第二句第二个单词是“and”,除了第二个之外的句子全是第四个单词一定可以区分出来!!此中必有隐情吧,说不好出题…
数组模拟双链表 通过前面的学习我们知道单链表是单个指针指向操作,那么通过类比我们可以把指针设定为两个,并且让它们分别指向前后数据,这就是"双向链表".使用这种链表,不仅可以从前往后, 还可以从后往前遍历数据,十分方便. 1.使用数组模拟双链表 // e[i] 表示节点i的值 // l[i] 指向当前节点的上一节点(左节点)的指针:即存的是左边一个节点的位置(下标) // r[i] 指向当前节点的下一节点(右节点)的指针:即存的是右边一个节点的位置(下标) // idx 存储当前已经用到…
Codeforces 题目传送门 & 洛谷题目传送门 qwq 这题大约是二十来天前 AC 的罢,为何拖到此时才完成这篇题解,由此可见我是个名副其实的大鸽子( 这是我上 M 的那场我没切掉的 F2 哦,u1s1 我上 M 还要多亏那场的 F1 啊( 首先暴力 \(3^nn\) 枚举子集显然是过不去的,否则这题就退化到 F1 了(大雾 考虑用一个容斥的思想,考虑求出答案的后缀和 \(f_i\),其中 \(i\) 是一个长度为 \(n-1\) 的二进制串.形式化地说,\(f_i\) 等于满足以下条件的…
这是一道典型的整数划分题目,适合正在研究动态规划的同学练练手,但是和上一个随笔一样,我是在Coursera中评测通过的,没有找到适合的OJ有这一道题(找到的ACMer拜托告诉一声~),这道题考察得较全面,考察了三种整数划分的变形问题. Openjudge 原题网址:Bailian2014研究生推免上机考试(校内) 原题: Description 将正整数n 表示成一系列正整数之和,n=n1+n2+…+nk, 其中n1>=n2>=…>=nk>=1 ,k>=1 . 正整数n 的这…
整数划分(四) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经常见到的整数划分,给出两个整数 n , m ,要求在 n 中加入m - 1 个乘号,将n分成m段,求出这m段的最大乘积   输入 第一行是一个整数T,表示有T组测试数据接下来T行,每行有两个正整数 n,m ( 1<=…
点击打开链接 整数划分 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 将正整数n表示成一系列正整数之和:n=n1+n2+-+nk,  其中n1≥n2≥-≥nk≥1,k≥1.  正整数n的这种表示称为正整数n的划分.求正整数n的不  同划分个数.  例如正整数6有如下11种不同的划分:  6:  5+1:  4+2,4+1+1:  3+3,3+2+1,3+1+1+1:  2+2+2,2+2+1+1,2+1+1+1+1:  1+1+1+1+1+1. 输入 第一行是测试…
本文是整数划分的第二节,主要介绍整数划分的一些性质. 一 先来弥补一下上一篇文章的遗留问题:要求我们所取的 (n=m1+m2+...+mi )中  m1 m2 ... mi连续,比如5=1+4就不符合要求了.这个时候的整数划分怎么操作呢? 这个问题的答案是这样的: 假设 n = r + (r + 1) + · · · + (r + k) ,我们需要找到所有的 r,这样我们就能获得划分数目了. 对上式进一步合并我们获得了 (2r + k)(k + 1) = 2n. 我们知道等式右面为一个偶数,而左…
01背包显然超时.然后就是一道神dp了.dp[i][j]表示j个数组成i的方案数.O(nsqrt(n)) #include<cstdio> #include<cstring> #include<cctype> #include<algorithm> using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i-…
题目很简单,给一个队列以及文件的位置,然后一个一个检查,如果第一个是优先级最高的就打印,否则放到队列后面,求所要打印的文件打印需要花费多长时间. 这里我用数组模拟队列实现,考虑到最糟糕的情况,必须把数组开到maxn*maxn.另外当所要打印的文件优先级不是最高的时候也需要排列到后面. 0.016s. 代码: #include <cstdio> const int maxn = 101; int t, n, m, time; int q[maxn*maxn]; int print() { int…
栈遵循先进后出的原则 括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现在,有一行括号序列,请你检查这行括号是否配对.   输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组.数据保证S中只含有"[","]","(",")"四种字符 输…
此题是个非常经典的题目,这个题目包含了整数划分(一)和整数划分(二)的所有情形,而且还增加了其它的情形,主要是用递归或者说是递推式来解,只要找到了递推式剩下的任务就是找边界条件了,我觉得边界也是非常重要的一步,如果找不准边界,这个题也很难做出来,当时我就是找边界找了好长时间,边界得琢磨琢磨.递推步骤如下: 第一行:将n划分成若干正整数之和的划分数.状态转移方程:dp[i][j]:和为i.最大数不超过j的拆分数dp[i][j]可以分为两种情况:1.拆分项至少有一个j 2.拆分项一个j也没有dp[i…