求助,来推翻我吧
我的理解是问题求所有数的S=∑xi2
那么子问题求前i个区间包括 i 的 Si=∑xi2
那么运用dp的思想,但不会有状态转移方程
有如下操作
哪位大佬可以告诉我,我这种做法哪里错了呀,我觉得是对的,但是样例都过不去,代码应该没有问题检查好几遍了
小白感激不尽
#include<cstdio>
#include<set>
using namespace std;
const int maxn=1600000;
int a[maxn];
int b[maxn];
struct Node{
int l,r;
};
Node node[maxn];
set<int>s;
int main(){
int n;
set<int>::iterator it;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d",&node[i].l,&node[i].r);
int cnt1,cnt2;
cnt1=cnt2=1;
for(int i=node[1].l;i<=node[1].r;i++){
a[cnt1]=i*i;
s.insert(a[cnt1]);
cnt1++;
}
for(int i=2;i<=n;i++){
cnt1=1;
for(int j=node[i].l;j<=node[i].r;j++)
a[cnt1++]=j*j; //第i个区间数的和
cnt2=1;
for(int j=1;j<cnt1;j++){
for(it=s.begin();it!=s.end();it++){
b[cnt2++]=(*it)*(*it)+a[j]*a[j]; //存前i个数和的种类
}
}
s.clear(); // 清空上一次的
for(int k=1;k<cnt2;k++)
s.insert(b[k]); //去重这一次的
}
printf("%d\n",s.size());
return 0;
}
查看9道真题和解析
