#include<stdio.h>//最大连续子序列和
#include<string.h>//最大连续子序列
#include<string>//杭电1003
#include<iostream>
#include<algorithm>
using namespace std;
#define N 1234567
#define M 12int n,a[N];
int main() {
int T;
cin>>T;
int tt=1;
while(T--) {
cin>>n;
for(int i=0; i<n; i++)
scanf("%d",&a[i]);
int sum=0,ma,temp=0,st=0,ed=0;
ma=a[0];
for(int i=0; i<n; i++) {
if(sum<0) {
sum=a[i];
temp=i;
} else {
sum+=a[i];
}
if(sum>ma) {
st=temp;
ma=sum;
ed=i;
}
}
printf("Case %d:\n",tt++);
printf("%d %d %d\n",ma,st+1,ed+1);
if(T)printf("\n");
}
return 0;
}
#include<stdio.h>//最大上升子序列和
#include<iostream>//杭电1087using namespace std;
#define N 112345678
#define M 11234
#define INF 0x3f3f3f3fint a[N],d[N],n,m;
int main() {
while(cin>>n&&n) {
for(int i=0; i<n; i++) {
scanf("%d",&a[i]);
d[i]=a[i];
}
int ma=d[0];
for(int i=0; i<n; i++) {
for(int j=0; j<i; j++)
if(a[i]>a[j] && d[j]+a[i]>d[i]) {
d[i]=d[j]+a[i];
ma=max(ma,d[i]);
}
}
cout<<ma<<endl;
}
return 0;
}
#include<stdio.h>//最大上升子序列
#include<iostream>
using namespace std;
#define N 112345678int a[N],d[N],n;
int main() {
while(cin>>n) {
for(int i = 0; i < n; i++) {
scanf("%d",&a[i]);
d[i]=1;
}
int ma=1;
for(int i = 0; i < n; i++) {
for(int j = 0; j < i; j++) {
if(a[i] > a[j] && d[j] >= d[i])
d[i]=d[j]+1;
}
ma=max(ma,d[i]);
}
cout<<ma<<endl;
}
return 0;
}
#include<string.h>//最长公共子串
#include<iostream>
#include<stdio.h>
using namespace std;
#define N 112345678
#define M 11234
#define INF 0x3f3f3f3fint n,m,a[N],b[N];
string s,t,p;int main() {
while(cin>>s>>t) {
int ma=0;
memset(a,0,sizeof(a));
for(int i=0; i<s.length(); i++) {
for(int j=0; j<t.length(); j++) {
if(s[i]==t[j]) {
if(j==0)
a[j]=1;
else
a[j]=b[j-1]+1;
} else
a[j]=0;
// printf("%d ",a[j]);
// if(j==t.length()-1)printf("\n");
if(a[j]>ma) {
ma=a[j];
p=t.substr(j-ma+1,ma);
}
}
for(int j=0; j<t.length(); j++)
b[j]=a[j];
}
cout<<"最长公共子串长度: "<<ma<<endl;
cout<<"公共子串: "<<p<<endl;
}
return 0;
}
#include<string.h>//最长公共子序列
#include<string>
#include<stdio.h>
#include<iostream>using namespace std;
#define M 11234
#define INF 0x3f3f3f3fint d[M][M],n,m;
string s1,s2;int main() {
while(cin>>s1>>s2) {
for(int i=1; i<=s1.length(); i++)
for(int j=1; j<=s2.length(); j++) {if(s1[i-1]==s2[j-1])
d[i][j]=d[i-1][j-1]+1;
else
d[i][j] = max(d[i-1][j],d[i][j-1]);
}
cout<<d[s1.length()][s2.length()]<<endl;
}
return 0;
}
#include<algorithm>//最长上升公共子序列
#include<string>
#include<string.h>
#include<stdio.h>
#include<iostream>
using namespace std;
#define N 505int a[N],l1,l2,b[N],ma,f[N][N];
int pre_i[N][N], pre_j[N][N], path[N], mj;void solve3() {
memset(f, 0, sizeof(f) );
memset(pre_i, 0, sizeof(pre_i) );
memset(pre_j, 0, sizeof(pre_j) );
for(int i = 1; i <= l1; i++) {
int ma1 = 0, i1 = 0, j1 = 0;
for(int j = 1; j <= l2; j++) {
f[i][j] = f[i-1][j];
pre_i[i][j] = i-1;
pre_j[i][j] = j;
if(a[i-1] > b[j-1] && f[i-1][j] > ma1) {
ma1 = f[i-1][j];
i1 = i-1;
j1 = j;
}
if(a[i-1] == b[j-1]) {
f[i][j] = ma1 + 1;
pre_i[i][j] = i1;
pre_j[i][j] = j1;
}}
}
ma = mj = -1;
for(int j = 1; j <= l2; j++)
if(f[l1][j] > ma) {
ma = f[l1][j];
mj = j;
}
int i = l1, j = mj ,k = 0;
while( f[i][j] ) {
int x = pre_i[i][j], y = pre_j[i][j];
if(f[i][j] != f[x][y]) {
path[k++] = b[j-1];
}
i = x;
j = y;
}
cout<<ma<<endl;
for(i = k-1; i >= 0; i--) {
printf("%d", path[i]);
if(i > 0) printf(" ");
else printf("\n");
}}
int main() {
int T;
cin>>T;
while(T--) {
scanf("%d", &l1);
for(int i = 0; i < l1; i++)
scanf("%d", &a[i]);
scanf("%d", &l2);
for(int i = 0; i < l2; i++)
scanf("%d", &b[i]);solve3();
}
return 0;
}