#include<iostream>
using namespace std;
const int maxn=90;
int main(){
int dp[maxn];
for(int i=0;i<maxn;i++){
if(i==0)dp[i]=0;
else if(i==1)dp[i]=1;
else{
dp[i]=dp[i-1]+dp[i-2];
}
}
int n;
while(cin>>n){
cout<<dp[n+1]<<endl;;
}
return 0;
}
2.吃糖果
#include<iostream>
using namespace std;
const int maxn=90;
int main(){
int dp[maxn];
for(int i=0;i<maxn;i++){
if(i==0)dp[i]=0;
else if(i==1)dp[i]=1;
else{
dp[i]=dp[i-1]+dp[i-2];
}
}
int n;
while(cin>>n){
cout<<dp[n+1]<<endl;;
}
return 0;
}
3.最大序列和
#include<iostream>
#include<climits>
using namespace std;
const int maxn=1000000;
long long arr[maxn];
long long dp[maxn];
long long MaxSubsequence(int n){
long long maximum=-99999;
for(int i=0;i<n;i++){
if(i==0){
dp[i]=arr[i];
}else {
dp[i]=max(arr[i],dp[i-1]+arr[i]);
}
//cout<<dp[i]<<endl;
maximum=max(maximum,dp[i]);
//cout<<maximum<<endl;
}
return maximum;
}
int main(){
int n;
while(cin>>n){
for(int i=0;i<n;i++){
cin>>arr[i];
}
long long answer=MaxSubsequence(n);
cout<<answer<<endl;
}
return 0;
}
4.最大子矩阵
#include<iostream>
using namespace std;
const int maxn=100;
int matrix[maxn][maxn]; //原始矩阵
int total[maxn][maxn]; //辅助矩阵
int arr[maxn];
int dp[maxn];
int MaxSubsequence(int n){
int maximum=-9999;
for(int i=0;i<n;i++){
if(i==0){
dp[i]=arr[i];
}
else{
dp[i]=max(arr[i],dp[i-1]+arr[i]);
}
maximum=max(maximum,dp[i]);
}
return maximum;
}
int MaxSubmatrix(int n){
int maximal=-9999;
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
for(int k=0;k<n;k++){
if(i==0)
arr[k]=total[j][k];
else
arr[k]=total[j][k]-total[i-1][k];
}
int current=MaxSubsequence(n);
maximal=max(maximal,current);
}
}
return maximal;
}
int main(){
int n;
while(cin>>n){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>matrix[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==0)
total[i][j]=matrix[i][j];
else
total[i][j]=total[i-1][j]+matrix[i][j];
}
}
int answer =MaxSubmatrix(n);
cout<<answer<<endl;
}
return 0;
}