一道acm题目请教

来源:百度知道 编辑:UC知道 时间:2024/06/17 17:08:29
http://acm.hdu.edu.cn/showproblem.php?pid=1087
#include<stdio.h>

void main(){
int a[1002],b[1002];
int i,j,max,k,maxNumber;
while(scanf("%d",&a[0])!=EOF&&a[0]){
for(i=1;i<=a[0];i++)
scanf("%d",&a[i]),b[i]=0;
b[1]=a[1];
k=0;
b[0]=0;
maxNumber=-1;
for(i=1;i<=a[0];i++){
max=-1;
for(j=1;j<i;j++){
if(a[j]<a[i]&&a[j]>=max)//寻找i前面最大的且小于a[i]的数,对应的b[i]的值便是i前面最大序列的和。
max=a[j],k=j;
b[i]=a[i]+b[k];
if(b[i]>maxNumber)
maxNumber=b[i];
}}
// for(j=1;j<=a[0];j++)
//printf("%d ",b[j]);
printf("%d",maxNumber);
printf("\n");
}
}
我用了一些测试数据答案正确,但是总是通不过。总是回答错误,有哪位高手能不能帮我看看,哪里出了问题。。。。。。。。做的人都是烦的。。。。。。。或是给些测试数据也好啊。。。。。。。。谢谢啦。。。。。。

很基础的动态规划嘛
#include<iostream>
using namespace std;
int main()
{
int a[1002],ans[1002];//ans[i]表示取了a[i]的序列的最大值
int n;
while(scanf("%d",&n)!=EOF&&n)
{
for(int i=1;i<=n;i++)
scanf("%d",a+i);
ans[0]=0,a[0]=-1;
int ma=-1;//存放结果,显然ma是ans[]中的最大值
for(int i=1;i<=n;i++)
{
int p=-1;
for(int j=i-1;j>=0;j--)
if(a[j]<a[i])
p=max(p,ans[j]);
ma=max(ma,ans[i]=p+a[i]);
}
printf("%d\n",ma);
}
}

唉,看到一堆变量名abcdijk的代码就头痛!不想看了。

是不是格式的问题,貌似自动判断的系统对格式要求很严格呢。空格错了都不行