登山(还是关于dp的题目)
网址:http://ybt.ssoier.cn:8088/problem_show.php?pid=1283这题虽然代码写了出来,但运行了好几次都不对,这又是如何回事呢?
大神指教
代码(便于复制):
#include <stdio.h>
int main(void){
大家加油,我无能为力了 本帖最后由 baige 于 2021-3-10 21:26 编辑
#include <stdio.h>
#define max(a, b) (a > b ? a : b)
int a, dp;
int n;
int main(void) {
scanf("%d",&n);
for(int i = 1; i <= n; i++) scanf("%d",&a);
for(int i = 0; i < 1010; i++){
dp = dp = 1;
}
for(int i = 2; i <= n; i++){
for(int j = i-1; j >= 1; j--){
if(a < a) dp = max(dp, dp+1);
}
}
for(int i = n-1; i >= 1; i--){
for(int j = i+1; j <= n; j++){
if(a > a) dp = max(dp, dp+1);
}
}
// 如有疑问,请取消注释看输出
// 第一个循环表示从1到i的过程中上山的最大观看景点数
// 第二个循环表示从i到n的过程中下山的最大观看景点数
// i这个景点重复计算因此需要dp+dp-1
// for(int i = 1; i <= n; i++){
// printf("%d ",dp);
// }
// puts("");
// for(int i = 1; i <= n; i++){
// printf("%d ",dp);
// }
// puts("");
int ans = 0;
for(int i = 1; i <= n; i++){
ans = max(ans, dp+dp-1);
}
printf("%d\n",ans);
return 0;
} 我的思路是先排序,再遍历数组
后面比前面大次数+1,相等结束遍历 巴巴鲁 发表于 2021-3-10 09:57
我的思路是先排序,再遍历数组
后面比前面大次数+1,相等结束遍历
这种方法好像不行,会超时(时间5s)
页:
[1]