#include<bits/stdc++.h>
using namespace std;#definedbdouble#definelllonglong#definePirpair<int,int>#definefifirst#definesesecond#definepbpush_back#definem_pmake_pair#defineinf0x3f3f3f3f#defineINF0x3f3f3f3f3f3f3f3f/*==========ACMer===========*/int n, m;int f[105][2];intmain(){scanf("%d %d",&n,&m);memset(f,-inf,sizeof f);
f[0][0]=0;for(int i =1; i <= n; i ++){int x;scanf("%d",&x);for(int j = m; j >0; j --){
f[j][0]=max(f[j][0], f[j][1]+ x);
f[j][1]=max(f[j][1], f[j -1][0]- x);}}int ans =0;for(int i =0; i <= m; i ++)
ans =max(ans,max(f[i][0], f[i][1]));printf("%d\n", ans);return0;}
思路盗用一张别人的图。在上图中:手中有货 与手中无货是两个状态,这两个状态之间相互转换。图中的入口和出口对应:初始化 和 答案。y 总的状态机模型,把一些复杂的状态表示,状态转移,变的生动。代码#include <bits/stdc++.h>using namespace std;#define db double#define ll long long#define Pir pair<int, int>#define fi first#defi.