#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e4 + 10;
int a[N];//存储数据
int dp[N];//dp[i]表示以第i个位置的数为结尾的最长不下降子序列的长度
int ans = 0;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 1; i <= n; i++) dp[i] = 1;//初始化
for (int i = 1; i <= n; i++)
{
for (int j = 1; j < i; j++)
{
if (a[j] < a[i])
dp[i] = max(dp[j] + 1, dp[i]);
}
ans = max(dp[i], ans);
}
// for (int i = 1;i <= n;i++) cout << dp[i] << " ";
cout << ans << endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
int a[51][51][4];
cin >> n;
memset(a, 0, sizeof(a));
while (n)
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
{
cin >> a[i][j][1];
a[i][j][2] = a[i][j][1];
a[i][j][3] = 0;
}
for (int i = n - 1; i >= 1; i--)
for (int j = 1; j <= i; j++)
{
if (a[i + 1][j][2] > a[i + 1][j + 1][2])
{
a[i][j][2] = a[i + 1][j][2] + a[i][j][2];
a[i][j][3] = 0;
}
else
{
a[i][j][2] = a[i + 1][j + 1][2] + a[i][j][2];
a[i][j][3] = 1;
}
}cout << a[1][1][2] << endl;
int j = 1;
for (int i = 1; i <= n - 1; i++)
{
j = j + a[i][j][3];
}
cin >> n;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
string s,t;
int dp[105][105];
int main()
{
while (cin >> s >> t)
{
memset(dp, 0, sizeof(dp));
int a = s.size();
int b = t.size();
for(int i=1;i<=a;i++)
for (int j = 1; j <= b; j++)
{
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
if (s[i - 1] == t[j - 1])
dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1);
}
cout << dp[a][b] << endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n, m, f[10005];
struct node{
int w;
int c;
}d[105];
int main()
{
scanf("%d%d", &m, &n);
for (int i = 1; i <= n; i++)
{
scanf("%d%d", &d[i].w, &d[i].c);
}
for (int i = 1; i <= n; i++)
for (int v = 1; v <=m; v++)
{
if (d[i].w <= v)
f[v] = max(f[v], f[v - d[i].w] + d[i].c);
/*if (v < d[i].w) f[i][v] = f[i - 1][v];
else
if (f[i - 1][v] > f[i][v - d[i].w] + d[i].c) f[i][v] = f[i - 1][v];
else
f[i][v] = f[i][v - d[i].w] + d[i].c;*/
}
printf("max=%d\n", f[m]);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, m, dp[1005][1005], v[1005][1005];
int main()
{
cin >> m >> n;
for (int i = 0; i <= m; i++)
for (int j = 1; j <= n; j++)
{
cin >> v[j][i];
}
for (int i = 0; i <= m; i++)
{
dp[1][i] = v[1][i];
}
for (int i = 0; i <= n; i++)
for (int j = 1; j <= m; j++)
{
int maxn = 0;
//find
for (int xk = 0; xk <= j; xk++)
maxn = max(maxn, v[i][xk] + dp[i - 1][j - xk]);
dp[i][j] = maxn;
}
cout << dp[n][m] << endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n, m, f[10005];
struct node{
int w;
int c;
}d[105];
int main()
{
scanf("%d%d", &m, &n);
for (int i = 1; i <= n; i++)
{
scanf("%d%d", &d[i].w, &d[i].c);
}
for (int i = 1; i <= n; i++)
for (int v = m; v > 0; v--)
{
if (d[i].w <= v)
f[v] = max(f[v], f[v - d[i].w] + d[i].c);
}
printf("%d\n", f[m]);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int n, sum, maxn = -INT16_MAX, a[100001];
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
sum = 0;
for (int i = 1; i <= n; i++)
{
sum += a[i];
if (sum > maxn)
maxn = sum;
if (sum < 0)
sum = 0;
}
cout << maxn <<endl;
return 0;
}