1107: 迟来的A+B
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 920 Solved: 217
[ Submit][ Status][ Web Board]
Description
“A+B”多么熟悉的题目,在本届校赛开始前CHZ同学(人称“dp小王子“)一直叫我出道A+B给他做,但由于各种原因没有出成,使他感到很遗憾,为了在世界末日前弥补他的遗憾,就决定出道A+B献给CHZ同学!!题目是这样的:
先给你n(1=<n<=100000)个数的数组A,再给你两个数X,Y(1=<X,Y<n),求sum=(A0+A1+….+Ax-1)+(Ay+Ay+1+….+An-1);
Input
有多组数据,每组数据的第一行有两个数字n,m(1=<m<=100000),表示数据的个数和查询的个数,第二行是n个数据,第三行到m+3行每行有两个数X,Y(1=<X,Y<n);
Output
对每个查询输出一个结果,每个结果占一行
Sample Input
10 11 2 3 4 5 5 4 3 2 15 5
Sample Output
30
DP还是不会..附代码 日后回顾
#include<stdio.h> //dp
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
int a[100010],sumx[100010],sumy[100010];
int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int j;
//sumx[0]=a[0];
//sumy[n-1]=a[n];
for(j=0;j<n;j++)
{
if(j==0)
sumx[j]=a[j];
else
sumx[j]=sumx[j-1]+a[j];
}
for(j=n-1;j>=0;j--)
{
if(j==n-1)
sumy[j]=a[j];
else
sumy[j]=sumy[j+1]+a[j];
}
while(m--)
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",sumx[x-1]+sumy[y]);
}
}
return 0;
}