关于DP的一些模板与题目

1.线性DP

  

斐波那契数列(%1000)实现

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
long long f[1000005],a[1000005];
long long DFS(int i)//斐波那契 
{
	if(i==1) return f[1]=1;
	if(i==2) return f[2]=1;
	if(f[i]>0) return f[i];
	return f[i]=(DFS(i-2)+DFS(i-1))%1000;
    //因为斐波那契这样的数列 是不断累加得到的结果
    //所以在每个结果后面%1000并不会影响最后得到%1000的结果
    //但如果只在最后写%1000 longlong也会炸
}
int main()
{
	int n;
	cin>>n;
	long long maxx=0;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		maxx=max(a[i],maxx);
	}
	DFS(maxx);

	for(int i=1;i<=n;i++)
		cout<<f[a[i]]<<endl; 
	
	return 0;
}
DP实现
 #include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
long long f[1000005],a[1000005];
int main()
{
	int n;
	cin>>n;
	f[1]=1,f[2]=1;
	for(int i=3;i<=n;i++)
		f[i]=f[i-1]+f[i-2];
	cout<<f[n];
	
	return 0;
}
posted @ 2022-09-26 11:03  要不要吃哈密瓜  阅读(22)  评论(0编辑  收藏  举报