303 条题解
-
0s684373 LV 7 @ 2009-10-29 11:38:54
#include
int main()
{
int n;
int max=0;
int up[101]={0},down[101]={0};
int height[101];
int i,j;
scanf("%d",&n);
for(i=1;i -
02009-10-25 06:27:12@
var
a,b,c:array[1..10000]of integer;
i,j,n,max:integer;
begin
readln(n);
for i:=1 to n do
read(a[i]);
for i:=1 to n do
begin
b[i]:=1;
for j:=1 to i-1 do
if (a[i]>a[j])and(b[j]+1>b[i]) then
b[i]:=b[j]+1;
end;
for i:=n downto 1 do
begin
c[i]:=1;
for j:=i+1 to n do
if (a[i]>a[j])and(c[j]+1>c[i]) then
c[i]:=c[j]+1;
end;
for i:=1 to n do
if b[i]+c[i]>max then
max:=b[i]+c[i];
writeln(n-max+1);
end. -
02009-10-23 21:30:47@
出去的人数....WA了2次
-
02009-10-23 14:21:52@
var
a:array[1..100]of integer;
b:array[1..100,1..2]of integer;
i,j,n,max:integer;
begin
readln(n);
for i:=1 to n do
begin
read(a[i]);
b:=1; b:=1;
for j:=1 to i-1 do
if (a[j]b) then b:=b[j,1]+1;
end;
for i:=n downto 1 do
for j:=n downto i+1 do
if (a[j]b) then b:=b[j,2]+1;
for i:=1 to n do
if b+b>max then max:=b+b;
writeln(n-max+1);
end. -
02009-10-20 19:45:11@
var
a:array[1..100]of integer;
b:array[1..100,1..2]of integer;
i,j,n,max:integer;
begin
readln(n);
for i:=1 to n do
begin
read(a[i]);
b:=1; b:=1;
for j:=1 to i-1 do
if (a[j]b) then b:=b[j,1]+1;
end;
for i:=n downto 1 do
for j:=n downto i+1 do
if (a[j]b) then b:=b[j,2]+1;
for i:=1 to n do
if b+b>max then max:=b+b;
writeln(n-max+1);
end. -
02009-10-18 00:01:25@
var
a:array[1..100]of integer;
b:array[1..100,1..2]of integer;
i,j,n,max:integer;
begin
readln(n);
for i:=1 to n do
begin
read(a[i]);
b:=1; b:=1;
for j:=1 to i-1 do
if (a[j]b) then b:=b[j,1]+1;
end;
for i:=n downto 1 do
for j:=n downto i+1 do
if (a[j]b) then b:=b[j,2]+1;
for i:=1 to n do
if b+b>max then max:=b+b;
writeln(n-max+1);
end. -
02009-10-17 12:15:08@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms动态规划,认真审题就行。。。
-
02009-10-11 11:25:07@
var
a,f,g:array[0..1000] of longint;
i,j,k,l,m,n,x,y,z:longint;
begin
readln(n);
for i:=1 to n do
read(a[i]);
for i:=n downto 1 do
begin
for j:=i+1 to n do
if (a[j] -
02009-10-11 11:08:27@
program hechang;
var
i,j,k,l,m,n,max:longint;
a,f,g:array[0..500] of longint;
begin
readln(n);
for i:=1 to n do
read(a[i]);
for i:=1 to n do begin
f[i]:=1;
g[i]:=1;
end;
for i:=2 to n do
for j:=1 to i-1 do
if (a[i]>a[j]) and (f[i]a[j]) and (g[i]max
then begin
max:=f[i]+g[i]-1;
end;
writeln(n-max);
end. -
02009-10-07 21:58:25@
A了半天都没C
-
02009-10-05 11:25:02@
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms两个循环。
第一个是求最长不下降子序列,
第二个是反着得的再求一边、
两次的相加,取最大的,就是不要出列的。用N一减就是出列的。
-
02009-09-22 18:02:45@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms最长不下降子序列。。。
for(a=n-2;a>=0;a--)
for(b=a+1;b -
02009-09-21 20:06:10@
program he_chang_dui_xing;
const maxn=100;
var i,j,k,m,n,o,u,ans:longint;
b,p,q:array[0..maxn]of longint;
begin
read(n);
for o:=1 to n do read(b[o]);
for i:=2 to n do
for j:=i-1 downto 1 do
if (b[i]>b[j])and(p[j]+1>p[i]) then p[i]:=p[j]+1;
for i:=n-1 downto 1 do
for j:=i+1 to n do
if (b[i]>b[j])and(q[j]+1>q[i]) then q[i]:=q[j]+1;
ans:=0;
for i:=1 to n do
if p[i]+q[i]+1>ans then ans:=p[i]+q[i]+1;
writeln(n-ans);
end. -
02009-09-20 13:00:38@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms1。暴搜求中间数。
2。分开其左右两边(包含中间)。
3。求最长上升(左)和最长下降(右)子序列。
4。左边+右边-1(求最大)。
5。总人数减去最大。程序
var a:array[1..100] of integer;
i,j,k,l,m:longint;
m1,m2:longint;
max:longint;procedure s1(v1,v2:longint);
var q2:array[1..100] of longint;
ii,jj,kk,mm:longint;
begin
fillchar(q2,sizeof(q2),0);
ii:=0;jj:=0;kk:=0;mm:=0;
for ii:=1 to v2 do q2[ii]:=1;
for ii:=v2-1 downto v1 do
begin
mm:=0;
for jj:=ii+1 to v2 do if (a[ii]a[jj]) and (mmm2 then m2:=q2[ii];
end;begin
readln(m);
for i:=1 to m do read(a[i]);
j:=0;
for i:=1 to m do if a[i]>j then j:=a[i];
for i:=1 to m do
begin
s1(1,i);
s2(i,m);
if m1+m2-1>max then begin max:=m1+m2-1;{writeln(max,' ',a[i],' ',m1,' ',m2);}end;
end;
writeln(m-max);
end. -
02009-09-20 11:14:08@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms终于ac了
看我的巨长型程序,都不知道我自己怎么写出来的
program p1098;
var
f1,f2:array[0..100,130..230] of integer;
a1,a2,max:array[0..100]of integer;
max1,max2,max11,max21:array[0..100,1..2] of integer;
n:integer;
procedure init;
var
i:integer;
begin
readln(n);
for i:=1 to n do
begin
read(a1[i]);
a2[n-i+1]:=a1[i];
end;
end;
procedure main;
var
i,j:integer;
begin
for i:=1 to n do
begin
f1:=1;
for j:=1 to n do
begin
if f1[i,a1[j]] -
02009-09-19 17:11:02@
#include
using namespace std;
int a[101],up[101],down[101];
int getUp(int i)
{
int j,p=0;
for(j=i-1;j>=0;j--)
if(a[i]>a[j]&&up[j]>p)
p = up[j];
return p;
}
int getDown(int i)
{
int j,max=0;
for(j=i-1;j>=0;j--)
{
if(a[i]max)
max = up[j];
if(down[j]>max)
max = down[j];
}
}
return max;
}
int main()
{
int i,n,t=up[0]=down[0]=1;
cin>>n;
cin>>a[0];
for(i=1;i>a[i];
up[i]=getUp(i)+1;
if(up[i]>t)
t=up[i];
down[i]=getDown(i)+1;
if(down[i]>t)
t=down[i];
}
cout -
02009-09-18 19:39:04@
一星半纪念~~
O(∩_∩)O~ -
02009-09-18 17:43:07@
-
02009-09-18 17:26:59@
-
02009-09-14 16:30:01@
#include
using namespace std;
int a[101],up[101],down[101];
int getUp(int i)
{
int j,p=0;
for(j=i-1;j>=0;j--)
if(a[i]>a[j]&&up[j]>p)
p = up[j];
return p;
}
int getDown(int i)
{
int j,max=0;
for(j=i-1;j>=0;j--)
{
if(a[i]max)
max = up[j];
if(down[j]>max)
max = down[j];
}
}
return max;
}
int main()
{
int i,n,t=up[0]=down[0]=1;
cin>>n;
cin>>a[0];
for(i=1;i>a[i];
up[i]=getUp(i)+1;
if(up[i]>t)
t=up[i];
down[i]=getDown(i)+1;
if(down[i]>t)
t=down[i];
}
cout