#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b[3000],c[3000],d[3000],maxn,ans=0;
cin>>a;
for(int i=1;i<=a;i++)
{
cin>>b[i];
}
c[1]=1;
for(int i=2;i<=a;i++)
{
maxn=0;
for(int j=1;j<i;j++)
{
if(b[i]>b[j])
{
if(c[j]>maxn)
{
maxn=c[j];
}
}
}
c[i]=maxn+1;
}
d[1]=1;
for(int i=a-1;i>=1;i--)
{
maxn=0;
for(int j=i+1;j<=a;j++)
{
if(b[i]>b[j])
{
if(d[j]>maxn)
{
maxn=d[j];
}
}
}
d[i]=maxn+1;
}
for(int i=1;i<=a;i++)
{
if(c[i]+d[i]>ans)
{
ans=c[i]+d[i];
}
}
cout<<a-(ans-1);
}
合唱队形(c++),大家帮我看看是哪错了!
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- _Youngyx 2021-10-24 18:51关注
#include <bits/stdc++.h> using namespace std; int a[102], dp1[102], dp2[102]; int n, mid, ans = 0, mx; int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { mx = 0; for (int k = 1; k < j; k++) { if (a[k] < a[j]) { mx = max(mx, dp1[k]); } } dp1[j] = mx + 1; } for (int j = n; j >= i; j--) { mx = 0; for (int k = n; k > j; k--) { if (a[k] < a[j]) { mx = max(dp2[k], mx); } } dp2[j] = mx + 1; } ans = max(ans, dp1[i] + dp2[i] - 1); } printf("%d", n - ans); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能
- ¥15 jmeter脚本回放有的是对的有的是错的
- ¥15 r语言蛋白组学相关问题