pat 1044 Shopping in Mars(16分)

严重超时。只过了第1,4个点,得12分,以后再说。

 后来换了思路,还是只得了16分,只有第2点错误,第4点超时,想不出不过的case。

//23:46   16分
#include<stdio.h>
const int NUM=100005;
int a[NUM];
int main()
{
	int n,i,val;
	int index=-1;
	freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);

	scanf("%d%d",&n,&val);
	a[0]=0;
	for(i=1;i<=n;i++){
		scanf("%d",&a[i]);
		a[i]+=a[i-1];
		if(index==-1&&a[i]>=val){
			index=i;
		}
	}
	int j,fg=0;
	for(i=index;i<=n;i++){
		for(j=0;j<i;j++){
			if(a[i]-a[j]==val){
				fg=1;
				printf("%d-%d\n",j+1,i);
			}
		}
	}
	if(fg==0){
		for(i=index;i<=n;i++){
			for(j=i-1;j>=0;j--){
				if(a[i]-a[j]>val){
					printf("%d-%d\n",j+1,i);
					break;
				}
			}
		}
	}

	return 0;
}


 

 

//1044 0:40
#include<stdio.h>
const int MAXN=100005;
int dp[MAXN];
int a[MAXN];
int main()
{
	int n,i,j,val;
	//freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r",stdin);

	scanf("%d%d",&n,&val);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
		dp[i]=a[i];
	}
	int fg=0;
	int index;
	for(i=0;i<n;i++){
		if(dp[i]==val){
			fg=1;
			printf("%d-%d\n",i+1,i+1);
			continue;
		}
		for(j=i+1;j<n;j++){
			if(dp[i]+a[j]==val){
				fg=1;
				printf("%d-%d\n",i+1,j+1);
				break;
			} else if(dp[i]+a[j]<val)
				dp[i]+=a[j];

		}
	}
	if(fg!=1){
		for(i=0;i<n;){
			dp[i]=a[i];
				if(dp[i]>val){
					printf("%d-%d\n",i+1,i+1);
					i++;
					continue;
					
				}
				for(j=i+1;j<n;j++){
					if(dp[i]+a[j]>val){
						index=i;
						while(dp[i]+a[j]-a[index]>val){
							dp[i]-=a[index];
							index++;
						}
						printf("%d-%d\n",index+1,j+1);
						i=index;
						break;
					} else 
						dp[i]+=a[j];
				}
				i++;

		}

	}
	return 0;
	
}

你可能感兴趣的:(pat 1044 Shopping in Mars(16分))