HJ103. Redraiment的走法
描述
输入描述
数据共2行,第1行先输入数组的个数,第2行再输入梅花桩的高度
输出描述
输出一个结果
示例1
输入:
6 2 5 1 5 4 5
输出:
3
说明:
6个点的高度各为 2 5 1 5 4 5 如从第1格开始走,最多为3步, 2 4 5 ,下标分别是 1 5 6 从第2格开始走,最多只有1步,5 而从第3格开始走最多有3步,1 4 5, 下标分别是 3 5 6 从第5格开始走最多有2步,4 5, 下标分别是 5 6 所以这个结果是3。C 解法, 执行用时: 1ms, 内存消耗: 332KB, 提交时间: 2021-08-02
#include <stdio.h> #include <string.h> int main(void) { int n; while(scanf("%d", &n) != EOF) { int arr[n]; int dp[n], max = 0; for(int i = 0;i < n;i++) { scanf("%d", &arr[i]); } memset(dp, 0, sizeof(dp)); dp[0] = 1; for(int i = 1;i < n;i++) { for(int j = 0;j < i;j++) { if(arr[i] > arr[j] && dp[j]+1 > dp[i]) { dp[i] = dp[j]+1; }else { if(!dp[i]) dp[i] = 1; } } if(max < dp[i]) max = dp[i]; } printf("%d\n", max); } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 344KB, 提交时间: 2020-10-31
#include <stdio.h> int main() { int n; while(scanf("%d", &n)!=EOF) { int num[1000]={0}; char dp[1000]={0}; int maxans=0; for(int i=0; i<n; i++) { scanf("%d", &num[i]); } dp[0]=1; for(int i=1; i<n; i++) { int maxval=0; for(int j=0; j<i; j++) { if(num[i]>num[j]) maxval=maxval>dp[j]?maxval:dp[j]; } dp[i]=maxval+1; if(maxans<dp[i]) maxans=dp[i]; } printf("%d\n", maxans); } return 0; }