共t条街对于每一条街上有n个店铺(n可能不相同),每次只能选两端第一个营业的店铺采购,采购第i个店铺会获得幸福度ai,采购完后,这个店铺和它相邻的店铺便会关门,问最大幸福度?

考场想了一下dp,一开始想一维但发现不好处理,二维参数也没有想出来,于是便开始了我的暴力瞎搞之旅,我随手写了几个例子发现对于n为奇数无论怎么采购,幸福度是固定的为a1, a3 , a5........an于是便可以直接累加,然而对于n为偶数又怎么去处理呢?我也随手写了n为6,8,10的数据发现其实就只有三种情况。

第一种情况:选编号为奇数的

第二种情况:选编号为偶数的

第三种情况:选两头,再考虑中间,举个栗子

  1. 3 8 20 8 15 12 12 25

对于这组数据我们选完a1 a8后再去进行选择a3 a5我们把选了用o表示没选的用x表示就是

o x o x o x x

貌似一定又两个连在一起的不选,但考场我也没去证明就直接用了,枚举这两个不选的位置就行,跑完样例发现过了便直接提交了,结果a了,自己也很懵逼。

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. inline int read(){
  4. int x=0,f=1;
  5. char ch=getchar();
  6. while(ch<'0'||ch>'9'){
  7. if(ch=='-')
  8. f=-1;
  9. ch=getchar();
  10. }
  11. while(ch>='0'&&ch<='9'){
  12. x=(x<<1)+(x<<3)+(ch^48);
  13. ch=getchar();
  14. }
  15. return x*f;
  16. }
  17. int t,n;
  18. long long f[310][1510],ans,tmp1,tmp2;
  19. int main(){
  20. t=read();
  21. for(int i=1;i<=t;++i){
  22. n=read();
  23. for(int j=1;j<=n;++j){
  24. f[i][j]=read();
  25. }
  26. if(n&1){
  27. for(int j=1;j<=n;++j){
  28. if(j&1) ans+=f[i][j];
  29. }
  30. }
  31. else{
  32. tmp2=0;
  33. for(int j=0;j<=n;++j){
  34. tmp1=0;
  35. for(int k=1;k<j;k+=2){
  36. tmp1+=f[i][k];
  37. }
  38. for(int k=j+2;k<=n;k+=2){
  39. tmp1+=f[i][k];
  40. }
  41. tmp2=max(tmp1,tmp2);
  42. }
  43. ans+=tmp2;
  44. }
  45. }
  46. printf("%lld",ans);
  47. return 0;
  48. }

貌似可以hack掉,可能数据比较水就a了,再放一个大佬写的前缀和表达

  1. #include<algorithm>
  2. #include<cstdio>
  3. #define ll long long
  4. #define MX 10001
  5. using namespace std;
  6. inline int read(){
  7. int x=0,f=1;
  8. char ch=getchar();
  9. while(ch<'0'||ch>'9'){
  10. if(ch=='-')
  11. f=-1;
  12. ch=getchar();
  13. }
  14. while(ch>='0'&&ch<='9'){
  15. x=(x<<1)+(x<<3)+(ch^48);
  16. ch=getchar();
  17. }
  18. return x*f;
  19. }
  20. int T,n;
  21. ll ans=0;
  22. int a[MX];
  23. ll suml[MX],sumr[MX];
  24. int main(){
  25. T=read();
  26. while(T--){
  27. n=read();
  28. sumr[n+1]=0;
  29. for(int i=1;i<=n;++i){
  30. a[i]=read();
  31. if(i&1){
  32. suml[i]=suml[i-1]+a[i];
  33. }else{
  34. suml[i]=suml[i-1];
  35. }
  36. }
  37. if(n&1){
  38. ans+=suml[n];
  39. }else{
  40. for(int i=n;i>=1;--i){
  41. if(i&1){
  42. sumr[i]=sumr[i+1];
  43. }else{
  44. sumr[i]=sumr[i+1]+a[i];
  45. }
  46. }
  47. ll sum=0;
  48. for(int i=1;i<=n;++i){
  49. sum=max(sum,suml[i-1]+sumr[i+1]);
  50. }
  51. ans+=sum;
  52. }
  53. }
  54. printf("%lld",ans);
  55. return 0;
  56. }

yzoj P2344 斯卡布罗集市 题解的更多相关文章

  1. 897A. Scarborough Fair# 斯卡布罗集市(模拟)

    题目出处:http://codeforces.com/problemset/problem/897/A 题目大意:将某个范围内的某个字符换成另外一个字符 #include<iostream> ...

  2. 龙珠超·布罗利【MGRT&幻之】【720P】剧场版

    [上传]龙珠超·布罗利[MGRT&幻之][720P]剧场版 这是一个,全新的“赛亚人”故事.“力量大会”之后,和平的地球.悟空了解到宇宙中还存在着自己未曾见过的强者,于是每天都为了变得更强而不 ...

  3. yzoj 2372 小B的数字 题解

    题意 判断是否存在一个序列 $ b_i $ 使得 $ \prod_{i = 1}^{n} b_i  | b_i^{a_i}$ 恒成立,其中 $ b_i $ 中的每个数都是2的正整数次幂. 样例输入 3 ...

  4. Python matplotlib numpy 曼德尔布罗特集合 曼德尔布罗特 B.Madelbrot

    import numpy as np import matplotlib.pyplot as plt def mandelbrot(h,w,maxit=20): y,x = np.ogrid[-1.4 ...

  5. OpenCV:初试牛刀-带滚动条的视频播放-2

    视频播放时点击窗口关闭按钮(即小叉号)关闭窗口 隐藏console控制台 使用VideoCapture和createTrackbar实现滚动条控制视频播放 #include<iostream&g ...

  6. 英语音乐---一、Scarborough Fair

    英语音乐---一.Scarborough Fair 一.总结 一句话总结:斯卡布罗集市 <斯卡布罗集市>诉说了一个缠绵凄美的爱情故事:一个参军的男青年远离自己相爱的姑娘在战争中不幸遇难,但 ...

  7. OI歌曲汇总

    在学习的间隙,我们广大的OIer创作了许多广为人知的歌曲 这里来个总结 (持续更新ing......) Lemon OI 葛平 Lemon OI chen_zhe Lemon OI kkksc03 膜 ...

  8. 本溪6397.7539(薇)xiaojie:本溪哪里有xiaomei

    本溪哪里有小姐服务大保健[微信:6397.7539倩儿小妹[本溪叫小姐服务√o服务微信:6397.7539倩儿小妹[本溪叫小姐服务][十微信:6397.7539倩儿小妹][本溪叫小姐包夜服务][十微信 ...

  9. 罗大佑 光阴的故事 ZT 欧美经典歌曲100首(1-50)

    老俞 my idol ———————————————————————————————— 罗大佑 光阴的故事 歌曲光阴的故事为2008年入库,是罗大佑在2000-1-1发行的专辑<情歌精选> ...

随机推荐

  1. JavaWeb——Servlet开发2

    1.HttpServletRequest的使用 获取Request的参数的方法. 方法getParameter将返回参数的单个值 方法getParameterValues将返回参数的值的数组 方法ge ...

  2. 初识JavaScript和面向对象

    1.javascript基本数据类型: number: 数值类型 string: 字符串类型 boolean: 布尔类型 null: 空类型 undefault:未定义类型 object: 基本数据类 ...

  3. 从SpringBoot构建十万博文聊聊缓存穿透

    前言 在博客系统中,为了提升响应速度,加入了 Redis 缓存,把文章主键 ID 作为 key 值去缓存查询,如果不存在对应的 value,就去数据库中查找 .这个时候,如果请求的并发量很大,就会对后 ...

  4. 容易上手搭建vue2.0开发环境

    第一步:安装node 前端开发框架和环境都是需要 Node.js ,先安装node.js开发环境,vue的运行是要依赖于node的npm的管理工具来实现,下载https://nodejs.org/en ...

  5. 洛谷 P3338 [ZJOI2014]力

    题意简述 读入\(n\)个数\(q_i\) 设\(F_j = \sum\limits_{i<j}\frac{q_i\times q_j}{(i-j)^2 }-\sum\limits_{i> ...

  6. 2019牛客暑期多校训练营(第十场)F-Popping Balloons

    >传送门< 题意:现在给你n个点 ,让你横着划三条线间距为r 然后竖着划三条线间距同样为r ,求经过最多的点数 思路:比赛看到这题的时候觉得能做,但是一看时间限制是5s,搞得我有不敢去碰了 ...

  7. 在Android Studio配置google protobuf

    1.在project的build.gradle中配置 buildscript { repositories { jcenter() mavenCentral() } dependencies { cl ...

  8. Spring Cloud Stream 核心概念

    Spring Cloud Stream简介 Spring cloud stream是一个构建与Spring Boot和Spring Integration之上的框架,方便开发人员快速构建基于Messa ...

  9. 终于找到可以一文多发的平台了! openwrite.cn

    openwrite.cn 一文多发平台 有时候自己辛苦写了几个小时的技术文章,被爬虫抓走.自己去全平台一个一个发,又过于麻烦.而且每个平台都不一样,发文同步很困难.那么终于有了一款一文多发的利器:Op ...

  10. Linux设备驱动程序学习----3.模块的编译和装载

    模块的编译和装载 更多内容请参考Linux设备驱动程序学习----目录 1. 设置测试系统 第1步,要先从kernel.org的镜像网站上获取一个主线内核,并安装到自己的系统中,因为学习驱动程序的编写 ...