P224 12.1
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/22fb6870aff1c0ac32b9d2fe4a51265a.png)
#include <iostream>
using namespace std;
int main(){
int candle;
cin>>candle;
int dp[30];
dp[1] = 1;
dp[0] = 0;
dp[2] = 2;
for (int i=3;i<=candle;i++){
dp[i] = dp[i-2]+dp[i-1];
}
cout<<dp[candle];
return 0;
}
P229 习题12.2
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7d6d1f58038d1c77035622fe7c594c23.png)
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 10000;
long long arr[MAXN];
long long dp[MAXN];
long long startitem,enditem;
long long maxx(long long a,long long b){
if (a>=b){return a;}
else {return b;}
}
long long maxsubsequence(int n){
long long maximum = 0;
for (int i=0;i<n;i++){
if (i == 0){
dp[i] = arr[i];
}
else{
dp[i] = maxx(arr[i],dp[i-1]+arr[i]);
}
if (maximum<dp[i]){
enditem = i;
}
maximum = maxx(dp[i],maximum);
}
return maximum;
}
int main(){
int n;
cin>>n;
for (int i=0;i<n;i++){
cin>>arr[i];
}
long long answer = maxsubsequence(n);
cout<<answer<<' ';
long long sum = 0;
for (int i=enditem;i>=0;i--){
sum += arr[i];
if (sum == answer){cout<<arr[i];break;}
}
cout<<' '<<arr[enditem];
return 0;
}
P229 习题12.3
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/162b86ea88d79446e3b1f6d7ea16b6bf.png)
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 1000;
int arr[MAXN];
int dpup[MAXN];
int dpdown[MAXN][MAXN];
int main(){
freopen("D://case.txt","r",stdin);
int n;
cin>>n;
for (int i=0;i<n;i++){
cin>>arr[i];
}
for (int i=0;i<n;i++){
dpup[i] = 1;
for (int j=0;j<i;j++){
if (arr[i]>arr[j]){
dpup[i] = max(dpup[i],dpup[j]+1);
}
}
}
for (int m=0;m<n;m++){
for (int i=m;i<n;i++){
dpdown[m][i] = 1;
for (int j=m;j<i;j++){
if (arr[i]<arr[j]){
dpdown[m][i] = max(dpdown[m][i],dpdown[m][j]+1);
}
}
}
}
int answer = n;
for (int m=0;m<n;m++){
for (int k=m;k<n;k++){
answer = min(answer,n-dpup[m]-dpdown[m][k]+1);
}
}
cout<<answer<<endl;
}
P229 习题12.3