acwing1049
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
const int N = 100010,INF = 0x3f3f3f3f;
int n;
int w[N],f[N][2];
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i = 1;i<=n;i++){
scanf("%d",&w[i]);
}
f[0][0] = 0,f[0][1] = -INF;
for(int i=1;i<=n;i++){
f[i][0] = max(f[i-1][0],f[i-1][1]);
f[i][1] = f[i-1][0]+w[i];
}
printf("%d\n",max(f[n][0],f[n][1]));
}
return 0;
}
acwing1057
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e5+5,INF = 0x3f3f3f3f;
int f[N][105][2],a[N];
int main(){
int n,k;
scanf("%d%d",&n,&k);
for(int i = 1;i<=n;i++) scanf("%d",&a[i]);
memset(f,-0x3f,sizeof f);
for(int i=0;i<=n;i++) f[i][0][0] = 0;
for(int i=1;i<=n;i++){
for(int j=1;j<=k;j++){
f[i][j][0] = max(f[i-1][j][0],f[i-1][j][1]+a[i]);
f[i][j][1] = max(f[i-1][j][1],f[i-1][j-1][0]-a[i]);
}
}
int res = 0;
for(int i=0;i<=k;i++) res = max(res,f[n][i][0]);
printf("%d\n",res);
return 0;
}
acwing1058
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 100010,INF = 0x3f3f3f3f;
int n;
int w[N];
int f[N][3];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&w[i]);
f[0][0] = f[0][1] = -INF;
f[0][2] = 0;
for(int i=1;i<=n;i++){
f[i][2] = max(f[i-1][1],f[i-1][2]);
f[i][1] = f[i-1][0]+w[i];
f[i][0] = max(f[i-1][0],f[i-1][2]-w[i]);
}
printf("%d\n",max(f[n][1],f[n][2]));
return 0;
}
acwing1052
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
const int N = 55,mod = 1e9+7;
int n,m;
char str[N];
int f[N][N];
int main(){
scanf("%d%s",&n,str+1);
m = strlen(str+1);
int next[N] = {0};
for(int i=2,j=0;i<=n;i++){
while(j&&str[i]!=str[j+1]) j =next[j];
if(str[i]==str[j+1]) j++;
next[i] = j;
}
f[0][0] = 1;
for(int i=0;i<n;i++){
for(int j=0;j<=m;j++){
for(char k = 'a';k<='z';k++){
int u = j;
while(u&&k!=str[u+1])u = next[u];
if(k==str[u+1])u++;
if(u<m) f[i+1][u] = (f[i+1][u]+f[i][j])%mod;
}
}
}
int res = 0;
for(int i=0;i<m;i++) res = (res+f[n][i])%mod;
printf("%d\n",res);
return 0;
}