目录
题目1: P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles
代码示例:
题目2: Common Subsequence
代码示例
题目3 :最长上升子序列
最长不下降子序列
最长上升子序列oj答案
题目1: P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles
P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles - 洛谷 | 盘算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1216
代码示例:
- // c++ 代码示例
- #include <algorithm>
- #include <iostream>
- using namespace std ;
- int n,a[1005][1005],f[1005][1005] ;
- int dfs(int x, int y)
- {
- if (x == n) return a[x][y] ;
- if (f[x][y] != -1) return f[x][y] ;
- return f[x][y] = max(dfs(x + 1, y), dfs(x + 1, y + 1)) + a[x][y] ;
- }
- int main()
- {
- int n ;
- cin >> n ;
- for (int i = 1 ; i <= n ; i++)
- {
- for (int j = 1 ; j <= i ; j++)
- {
- cin >> a[i][j] ;
- }
- }
- for (int i = 1 ; i <= n ; i++)
- {
- for (int j = 1 ; j <= i ; j++)
- {
- f[i][j] = -1 ;
- }
- }
- cout << dfs(1, 1) ;
- return 0 ;
- }
复制代码- // c++ 代码示例
- #include <algorithm>
- #include <iostream>
- using namespace std ;
- long long n, a[1005][1005] ;
- int main()
- {
- cin >> n ;
- for (int i = 1 ; i <= n ; i++)
- {
- for (int j = 1 ; j <= i ; j++)
- {
- cin >> a[i][j] ;
- }
- }
- for (int i = n ; i >= 1 ; i--)
- {
- for (int j = 1 ; j <= i ; j++)
- {
- a[i][j] = a[i][j] + max(a[i + 1][j], a[i + 1][j + 1]);
-
- }
- }
- cout << a[1][1] ;
- return 0 ;
-
- }
复制代码
- // c++ 代码示例
- #include <algorithm>
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <cstdio>
- #include <string>
- using namespace std;
- #define rint register int
- inline void read(int &x)
- {
- x = 0;
- int w = 1;
- char ch = getchar();
- while (!isdigit(ch) && ch != '-')
- {
- ch = getchar();
- }
- if (ch == '-')
- {
- w = -1;
- ch = getchar();
- }
- while (isdigit(ch))
- {
- x = (x << 3) + (x << 1) + (ch ^ '0');
- ch = getchar();
- }
- x = x * w;
- }
- const int maxn = 1000 + 10;
- int n, a[maxn][maxn], ans;
- int main()
- {
- read(n);
- for (rint i = 1; i <= n; i++)
- {
- for (rint j = 1; j <= i; j++)
- {
- read(a[i][j]);
- if (i == 1 && j == 1)
- {
- // The top of the triangle
- continue;
- }
- if (j == 1)
- {
- // Left boundary
- a[i][j] += a[i - 1][j];
- }
- else if (j == i)
- {
- // Right boundary
- a[i][j] += a[i - 1][j - 1];
- }
- else
- {
- // Middle elements
- a[i][j] += max(a[i - 1][j - 1], a[i - 1][j]);
- }
- ans = max(ans, a[i][j]);
- }
- }
- cout << ans << endl;
- return 0;
- }
复制代码
题目2: Common Subsequence
Common Subsequence - HDU 1159 - Virtual Judge (vjudge.net)https://vjudge.net/problem/HDU-1159
代码示例
- // c++ 代码示例
- int a[MAXN], b[MAXN], f[MAXN][MAXN] ;
- int dp()
- {
- for (int i = 1 ; i <= n ; i++)
- {
- for (int j = 1 ; j <= m ; j++)
- {
- if (a[i - 1] == b[j - 1])
- {
- f[i][j] = f[i - 1][j - 1] + 1 ;
- }
- else
- {
- f[i][j] = std::max(f[i - 1][j], f[i][j - 1]) ;
- }
- }
- }
- return f[n][m] ;
- }
复制代码- // c++ 代码示例
- #include <cmath>
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <algorithm>
-
- using namespace std;
-
- char a[1001], b[1001];
- int dp[1001][1001], len1, len2;
-
- void lcs(int i,int j)
- {
- for(i=1; i<=len1; i++)
- {
- for(j=1; j<=len2; j++)
- {
- if(a[i-1] == b[j-1])
- dp[i][j] = dp[i-1][j-1] + 1;
- else if(dp[i-1][j] > dp[i][j-1])
- dp[i][j] = dp[i-1][j];
- else
- dp[i][j] = dp[i][j-1];
- }
- }
- }
-
- int main()
- {
- while(~scanf(" %s",a))
- {
- scanf(" %s", b);
- memset(dp, 0, sizeof(dp));
- len1 = strlen(a);
- len2 = strlen(b);
- lcs(len1, len2);
- printf("%d\n", dp[len1][len2]);
- }
- return 0;
- }
复制代码 题目3 :最长上升子序列
信息学奥赛一本通(C++版)在线评测体系 (ssoier.cn)http://ybt.ssoier.cn:8088/problem_show.php?pid=1281
最长不下降子序列
- //c++代码示例
- # include <iostream>
- # include <cstdio>
- using namespace std ;
- int n ;
- int a[1001] ;
- int f[1001] ;
- int mx = -1 ;
- int main()
- {
- scanf("%d", &n) ;
- for (int i = 1 ; i <= n ; i++)
- {
- scanf("%d", &a[i]) ;
- f[i] = 1 ;
- }
- for (int i = 2 ; i <= n ; i++)
- {
- for (int j = i - 1 ; j >= 1 ; j--)
- {
- if (a[i] >= a[j])
- {
- f[i] = max(f[i], f[j] + 1) ;
- }
- }
- }
- for (int i = 1 ; i <= n ; i++)
- {
- mx = max(mx, f[i]) ;
- }
- printf("%d", mx) ;
- return 0 ;
-
- }
复制代码- //c++代码示例
- # include <iostream>
- # include <cstdio>
- using namespace std ;
- int n ;
- int a[1001] ;
- int f[1001] ;
- int mx = -1 ;
- int main()
- {
- scanf("%d", &n) ;
- for (int i = 1 ; i <= n ; i++)
- {
- scanf("%d", &a[i]) ;
- f[i] = 1 ;
- }
- for (int i = n - 1 ; i >= 1 ; i--)
- {
- for (int j = i + 1 ; j <= n ; j++)
- {
- if (a[i] <= a[j])
- {
- f[i] = max(f[i], f[j] + 1) ;
- }
- }
- }
- for (int i = 1 ; i <= n ; i++)
- {
- mx = max(mx, f[i]) ;
- }
- printf("%d", mx) ;
- return 0 ;
-
- }
复制代码 最长上升子序列oj答案
- //c++代码示例
- # include <iostream>
- # include <cstdio>
- using namespace std ;
- int n ;
- int a[1001] ;
- int f[1001] ;
- int mx = -1 ;
- int main()
- {
- scanf("%d", &n) ;
- for (int i = 1 ; i <= n ; i++)
- {
- scanf("%d", &a[i]) ;
- f[i] = 1 ;
- }
- for (int i = n - 1 ; i >= 1 ; i--)
- {
- for (int j = i + 1 ; j <= n ; j++)
- {
- if (a[i] < a[j])
- {
- f[i] = max(f[i], f[j] + 1) ;
- }
- }
- }
- for (int i = 1 ; i <= n ; i++)
- {
- mx = max(mx, f[i]) ;
- }
- printf("%d", mx) ;
- return 0 ;
-
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |