LOJ P10018 数的划分 题解】的更多相关文章

每日一题 day52 打卡 Analysis 这道题直接搜索会TLE到**,但我们发现有很多没有用的状态可以删去,比如 1,1,5; 1,5,1; 5,1,1; 所以很容易想到一个优化:按不下降的顺序枚举划分出来的每个数. 然而还是会TLE... 再来想一个事情:n=7,k=4 已经枚举了 1,2,3 三个数,这是如果再枚举 2~7 的数就就显得非常蠢 所以你枚举的数 x 应该小于等于  n-sum(a[i])/(k-step+1), 综上,对于每个枚举的数 x ∈ {x∈N*| a[step-…
每日一题 day7 打卡 Analysis 树状数组 由于题目中给的数据是按y轴排序,我们只需构建x轴的树状数组,也就是说我们只需统计星星i之前一共有多少个x坐标小于或等于Xi的星星,这个数值也就是星星i的等级 又因为树状数组无法处理下标为0的元素(会死循环),所以要把每个x坐标+1 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 1…
Analysis 区间dp+压位高精 dp五分钟,高精两小时 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 110 #define INF 2147483647 using namespace std; typedef long long ll; ll dp[maxn][maxn][maxn],a[maxn]; ll s1[maxn…
将n个小球放到k个盒子中的情况总数 = (a)至少有一个盒子只有一个小球的情况数 + (b)没有一个盒子只有一个小球的情况数 这样写出表达式: a.因为盒子不加区分,那么=情况数与"将n-1个小球放到k-1个盒子中"的情况数相同 b.没有一个盒子只有一个小球,那么就把每个盒子中拿出来一个小球,对应的是"把(n-k)个小球放到k个盒子中的情况数" 然后将上面的思路化为递归式: 设f(n, k)代表将n个小球放到k个盒子中且没有空盒的情况,那么f(n, k) = f(n…
1039 数的划分 2001年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序).例如:n=7,k=3,下面三种划分方案被认为是相同的.1 1 5 1 5 1 5 1 1问有多少种不同的分法. 输入描述 Input Description 输入:n,k (6<n<=200,2<=k<=6) 输出描述…
1039 数的划分 2001年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 将整数n分成k份,且每份不能为空,任意两种划分方案不能相同(不考虑顺序).例如:n=7,k=3,下面三种划分方案被认为是相同的.1 1 5 1 5 1 5 1 1问有多少种不同的分法. 输入描述 Input Description 输入:n,k (6<n<=200,2<=k<=6) 输出描述…
题二 数的划分(20分) 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入:n,k (6<n<=200,2<=k<=6) 输出:一个整数,即不同的分法. 样例 输入: 7 3 输出:4 {四种分法为:1,1,5;1,2,4;1,3,3;2,2,3;} [思路] 递推. 递推式d[i][j]=d[i-1][j-1]+d[i-j][j]…
P1025 数的划分 题目描述 将整数n分成k份,且每份不能为空,任意两个方案不相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入输出格式 输入格式: n,k (6<n<=200,2<=k<=6) 输出格式: 一个整数,即不同的分法. 输入输出样例 输入样例#1: 7 3 输出样例#1: 4 说明 四种分法为:1,1,5;1,2,4;1,3,3;2,2,3; noip2001年提高组第二题…
算法训练 数的划分   时间限制:1.0s   内存限制:256.0MB        锦囊1 使用动态规划. 锦囊2 用F[i,j,k]表示将i划分成j份,最后一份为k的方案数,则F[i,j,k]=sum F[i-k,j-1,k'].其中k' 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种分法被认为是相同的. 1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法. 输入格式 n,k 输出格式 一个整数,即不同的分法 样例输…
P1025 数的划分f[i][j]表示把数i分成j份的方案数,分成两种情况,第一种是最小值是1,另一种是最小值不是1,对于不是1的情况,先都放一个1,那么f[i][j]=f[i-1][j-1]+f[i-j][j].初始化f[i][i]=1 #include<iostream> using namespace std; ][]; int n,k; int main() { cin>>n>>k; ;i<=n;i++) f[i][i]=; ;i<=n;i++) ;…