The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest C. Xyjj’s sequence(动态规划+欧拉降幂)

题目链接:https://nanti.jisuanke.com/t/40255

中文题面:

The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest C. Xyjj’s sequence(动态规划+欧拉降幂)_第1张图片

 

解题思路:先用欧拉降幂求出A,B两个序列,定义dp【0】【i】【j】为取A的前i个元素,B的前j个元素,且C的最后一个元素为B【j】,同理dp【1】【i】【j】为取A的前i个元素,B的前j个元素,且C的最后一个元素为A【i】,那么就很容易得到状态转移方程。那么最后答案即为max(dp【0】【n】【n】,dp【1】【n】【n】)。还有值得注意的是:该题需要使用滚动数组,不然会超内存。

在此贴两个关于欧拉降幂的链接吧:https://blog.csdn.net/qq_37632935/article/details/81264965

https://blog.csdn.net/u013534123/article/details/78912721

#include
using namespace std;
typedef long long ll;
const ll mod=100003;
const int maxn=5003;
int v1[maxn],v2[maxn];
ll a1[maxn],b1[maxn]; 
ll dp[2][3][maxn];
ll Mod(ll n,ll m){
	return n1)ans=ans/n*(n-1);
	return ans;
}
ll qpow(ll n,ll m,ll mo){
//	cout<<"YES\n";
	ll ans=1;
	while(m){
		if(m&1)ans=ans*n%mo;
		m/=2;
		n=n*n%mo;
	}
	return ans;
}
ll solve(int num,ll mo,ll tt){
	if(num==1||mo==1)return Mod(tt,mo);
	return qpow(tt,solve(num-1,ph(mo),tt)+ph(mo),mo);
}
int main(){
	ll a,b;
	scanf("%lld%lld",&a,&b);
	int n;
	scanf("%d",&n);
	for(int i=0;i 
 

  

 

你可能感兴趣的:(The 2019 ICPC China Nanchang National Invitational and International Silk-Road Programming Contest C. Xyjj’s sequence(动态规划+欧拉降幂))