博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cf 1141/problem/F2 Same Sum Blocks (Hard)
阅读量:5076 次
发布时间:2019-06-12

本文共 1430 字,大约阅读时间需要 4 分钟。

题目大意 : 给你最多不超过1500个整数,求出最多的不相交的区间,使得每个区间和都是一样的。输出方案,任意方案都可以了。

 

思路: 我们可以把每个区间和都计算出来,然后放到相应的位置。 

 

对于区间和相同的区间,我们从左到右做一次贪心寻找最多可以留下的不相交的区间。 

1 #include
2 using namespace std; 3 #define R register int 4 #define rep(i,a,b) for(R i=a;i<=b;i++) 5 #define Rep(i,a,b) for(R i=a;i<=b;i--) 6 #define ms(i,a) memset(a,i,sizeof(a)) 7 #define gc() getchar() 8 #define pii pair
9 #define mp make_pair10 template
void read(T &x){11 x=0; char c=gc(); int w=0; 12 while (!isdigit(c)) w+=c=='-',c=gc(); 13 while(isdigit(c)) x=x*10+(c^48),c=gc(); 14 if(w) x=-x; 15 }16 int const N=1500+3; 17 map
> mat; 18 map
> :: iterator p; 19 vector
now,best,tmp; 20 int n,a[N],ans; 21 int main(){22 read(n); 23 rep(i,1,n) read(a[i]); 24 rep(i,1,n){25 int sum=0; 26 rep(j,i,n){27 sum+=a[j]; 28 mat[sum].push_back(mp(i,j)); 29 }30 }31 for(p=mat.begin();p!=mat.end();p++){32 tmp=p->second; 33 int r=0,num=0; 34 now.clear(); 35 for(int i=0;i
tmp[i].second){37 r=tmp[i].second; 38 now.pop_back(); 39 now.push_back(tmp[i]); 40 }41 else if(tmp[i].first>r) {42 r=tmp[i].second; 43 num++; 44 now.push_back(tmp[i]); 45 }46 } 47 if(now.size()>ans){48 best=now; 49 ans=now.size(); 50 }51 }52 53 printf("%d\n",ans); 54 for(int i=0;i
View Code

 

转载于:https://www.cnblogs.com/ZJXXCN/p/10614380.html

你可能感兴趣的文章
小算法
查看>>
201521123024 《java程序设计》 第12周学习总结
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
IdentityServer4-用EF配置Client(一)
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
IOS-图片操作集合
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
团队项目开发客户端——登录子系统的设计
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
session如何保存在专门的StateServer服务器中
查看>>
react展示数据
查看>>
测试计划
查看>>
选择器
查看>>