A
#include <iostream>
using namespace std;
typedef long long LL;
const int mod = 100003;
int n;
int mem[100010];
LL work(int n)
{
if (mem[n] > 0)
return mem[n];
if (n < 0)
return 0;
if (n == 1 || n == 0)
return 1;
if (n == 3)
return 2;
mem[n] = work(n - 1) % mod + work(n - 3) % mod + work(n - 5) % mod;
return mem[n] % mod;
}
int main()
{
cin >> n;
cout << work(n) << endl;
return 0;
}
B
#include <iostream>
using namespace std;
int n;
int D[101][101];
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cin >> D[i][j];
}
}
for (int i = n - 1; i > 0; i--) {
for (int j = 1; j <= i; j++) {
D[i][j] += max(D[i + 1][j], D[i + 1][j + 1]);
}
}
cout << D[1][1] << endl;
return 0;
}
C
#include <iostream>
using namespace std;
const int N = 510;
int f[N][N];
int map[N][N];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> map[i][j];
for (int i = 1; i <= n; i++) {
f[i][1] = f[i - 1][1] + map[i][1];
}
for (int i = 1; i <= n; i++) {
f[1][i] = f[1][i - 1] + map[1][i];
}
for (int i = 2; i <= n; i++) {
for (int j = 2; j <= n; j++) {
f[i][j] = max(f[i - 1][j], f[i][j - 1]) + map[i][j];
}
}
cout << f[n][n] << endl;
return 0;
}
D
#include <iostream>
using namespace std;
const int N = 110;
int n, v;
int V[N];
int p[N];
int f[N][10010];
int main()
{
cin >> n >> v;
for (int i = 1; i <= n; i++) cin >> V[i] >> p[i];
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= v; j++) {
if (j < V[i]) {
f[i][j] = f[i - 1][j];
}
else {
f[i][j] = max(f[i - 1][j], f[ i - 1][j - V[i]] + p[i]);
}
}
}
cout << f[n][v] << endl;
return 0;
}
E
#include <iostream>
using namespace std;
const int N = 110;
int n, W;
int w[N], p[N];
long long f[N][50010];
int main()
{
cin >> n >> W;
for (int i = 1; i <= n; i++) cin >> w[i] >> p[i];
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= W; j++) {
if (j < w[i]) {
f[i][j] = f[i - 1][j];
}
else {
f[i][j] = max(f[i - 1][j], f[i][j - w[i]] + p[i]);
}
}
}
cout << f[n][W] << endl;
return 0;
}
F
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 110;
const int W = 50010;
int n, m;
int w[N];
int p[N];
int c[N];
int f[N][W];
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> w[i] >> p[i] >> c[i];
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= m; j++) {
for (int k = 0; k <= c[i] && k * w[i] <= j; k++ ) {
f[i][j] = max(f[i][j], f[i - 1][j - k * w[i]] + k * p[i]);
}
}
}
cout << f[n][m] << endl;
}
G
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1010;
int n;
int f[N];
int a[N];
int main()
{
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
f[i] = 1;
for (int j = 1; j <= i; j++) {
if (a[i] > a[j]) {
f[i] = max(f[i], f[j] + 1);
}
}
}
int res = 0;
for (int i = 1; i <= n; i++) {
res = max(res, f[i]);
}
cout << res << endl;
}
I
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 420;
int INF = 0x3f3f3f3f;
int n;
int f[N][N];
int g[N][N];
int s[N], a[N];
int main()
{
memset(f, -INF, sizeof f);
memset(g, INF, sizeof g);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
a[i + n] = a[i];
}
for (int i = 1; i <= 2 * n; i++) {
s[i] = a[i] + s[i - 1];
g[i][i] = 0, f[i][i] = 0;
}
for (int len = 2; len <= 2 * n; len++) {
for (int l = 1; len + l - 1 <= 2 * n; l++) {
int r = l + len - 1;
for (int k = l; k < r; k++) {
f[l][r] = max(f[l][r], f[l][k] + f[k + 1][r] + s[r] - s[l - 1]);
g[l][r] = min(g[l][r], g[l][k] + g[k + 1][r] + s[r] - s[l - 1]);
}
}
}
int maxv = -INF, minv = INF;
for (int i = 1; i <= n; i++) {
maxv = max(f[i][i + n - 1], maxv);
minv = min(g[i][i + n - 1], minv);
}
cout << minv << endl << maxv << endl;
return 0;
}
J
#include <iostream>
using namespace std;
typedef long long LL;
const int N = 50010;
int INF = 0x3f3f3f3f;
int n, a[N];
int main()
{
cin >> n;
LL sum = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
sum += a[i];
}
LL s1 = 0, s2 = 0;
LL resmax = 0, resmin = 0;
for (int i = 1; i <= n; i++) {
if (s1 < 0)
s1 = 0;
s1 += a[i];
resmax = max(s1, resmax);
}
for (int i = 1; i <= n; i++) {
if (s2 > 0)
s2 = 0;
s2 += a[i];
resmin = min(s2, resmin);
}
LL res = max(resmax, sum - resmin);
cout << res << endl;
return 0;
}
L
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int n, m;
int f[N][N];
int h[N][N];
int dx[] = { 0, 1, 0, -1 };
int dy[] = { 1, 0, -1, 0 };
int dp(int x, int y)
{
int& v = f[x][y];
if (v != -1)
return v;
v = 1;
for (int i = 0; i < 4; i++) {
int a = x + dx[i], b = y + dy[i];
if (a >= 1 && a <= n && b >= 1 && b <= m && h[a][b] < h[x][y]) {
v = max(v, dp(a, b) + 1);
}
}
return v;
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> h[i][j];
}
}
int res = 0;
memset(f, -1, sizeof f);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
res = max(res, dp(i, j));
}
}
cout << res << endl;
return 0;
}