CF1117D Magic Gems】的更多相关文章

CF1117D Magic Gems 考虑 \(dp\) , \(f[i]\) 表示用 \(i\) 个单位空间的方案数,答案即为 \(f[n]\). 对于一个位置,我们可以放 \(Magic\) 的,占 \(m\) 空间,也可以放 \(Normal\) 的,占 \(1\) 空间. 转移方程即为 \(f[i]=f[i-1]+f[i-m]\) ,边界条件为 \(f[0]=f[1]=f[2]=\dots f[m-1]=1\). 直接转移是 \(O(n)\) 的,无法通过,需要矩阵优化. 时间复杂度为…
Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec Problem Description Input The input contains a single line consisting of 2 integers N and M (1≤N≤10^18, 2≤M≤100). Output Print one integer, the total n…
D. Magic Gems time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Reziba has many magic gems. Each magic gem can be split into MM normal gems. The amount of space each magic (and normal) gem t…
传送门:Educational Codeforces Round 60 – D   题意: 给定N,M(n <1e18,m <= 100) 一个magic gem可以分裂成M个普通的gem,现在需要N个gem,可以选择一定的magic gem,指定每一个分裂或不分裂,问一共有多少种方案 两种分裂方案不同当且仅当magic gem的数量不同,或者分裂的magic gem的索引不同. 思路: 1.首先从dp的角度出发 设F(i)为最终需要i个gem的方案数,容易得到递推式: (总方案数 = 最右边…
https://codeforces.com/contest/1117/problem/D 题解:有一些魔法宝石,魔法宝石可以分成m个普通宝石,每个宝石(包括魔法宝石)占用1个空间,让你求占用n个空间的方法有几种,有不同数量的魔法宝石和不同分法的方法算不同的方法, 分析:根据一些猜想可以推出递推式f[n]=f[n-1]+f[n-m]  : 答案也比较好猜想,牺牲一个然后分解 m 个 然后就是简单的构造矩阵快速幂 或者使用无敌杜教 这里给出点杜教心得 , 有时候并不是只用给出8项 , 而是给的数据…
易得递推式为f[i]=f[i-1]+f[i-M] 最终答案即为f[N]. 由于N很大,用矩阵快速幂求解. code: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int MOD=1e9+7; ll n,m; struct mat { ll a[105][105]; }; mat mat_mul(mat x,mat y) { mat res; memset(res.a,0,sizeof(res.…
题目传送门 题意: 一个魔法水晶可以分裂成m个水晶,求放满n个水晶的方案数(mol1e9+7) 思路: 线性dp,dp[i]=dp[i]+dp[i-m]; 由于n到1e18,所以要用到矩阵快速幂优化 注意初始化 代码: #include<bits/stdc++.h> using namespace std; #define mod 1000000007 typedef long long ll; #define MAX 105 ;//矩阵的大小 int T; ll n,m; ll add(ll…
题目大意: 给定n m (1≤N≤1e18, 2≤M≤100) 一个魔法水晶可以分裂成连续的m个普通水晶 求用水晶放慢n个位置的方案modulo 1000000007 (1e9+7) input 4 2 output 5   设1为魔法水晶 0为普通水晶 n=4 m=2有5种方案 即 1111.0011.1001.1100.0000   得到递推公式 当 i < m 时 dp[ i ] = 1 当 i >= m 时 dp[ i ] = dp[ i-1 ] + dp[ i-m ] n的范围是1e…
CF1155D - Beautiful Array 题意:给你一个序列和x,你可以选择任意一个子串(可以为空)乘上x,使得得到的序列最大子串和最大.求这个最大值.30w,2s. 解:设fi,0/1/2表示序列前i个数还没乘x/正在乘x/乘完了x的最大后缀和.答案就是这个DP数组的最大值. #include <bits/stdc++.h> typedef long long LL; ; LL a[N], x, f[N][]; int n; int main() { scanf("%d%…
Necklace/center> 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5727 Description SJX has 2*N magic gems. N of them have Yin energy inside while others have Yang energy. SJX wants to make a necklace with these magic gems for his beloved BHB. To avoid…