【题意分析】

咋一看,这一题可以用贪心做,但是,时间复杂度是O(n*n),只能过60%的数据。
【贪心算法】(超时,60分)
#include<cstdio>
#include<cstring>
using namespace std;
int n,i,ans,sum,o,j,maxy=0,p;
unsigned long long a[100003],b[100003],maxx=0;
bool bo[100003];
int main()
{
 freopen("salesman.in","r",stdin);
 freopen("salesman.out","w",stdout);
 scanf("%d",&n);
 for(i=1;i<=n;i++) scanf("%d",&a[i]);
 for(i=1;i<=n;i++) scanf("%d",&b[i]);
    p=0;
 memset(bo,1,sizeof(bo));
 for(i=1;i<=n;i++)
 {
  int maxo=0;
  for(j=1;j<=n;j++)
  if(bo[j]==1)
  {
   if(a[j]>p) p=a[j];
   if((p*2+b[j])>maxo) { maxo=p*2+b[j]; o=j;}
  }
  if(p<a[o]) p=a[o];
  bo[o]=0;
  if(a[o]>maxy) maxy=a[o];
  maxx+=b[o];
  printf("%lld\n",maxx+(maxy*2));
 }
 return 0;
}
下面是正解: 
第一步:找出所有中的最大值,记录下标k
  第二步:在k的前面找ai的最大值与下标记录,在k的后面找ai+di*2的最大值与下标记录(预处理)
  第三步:比较二者选较大值,如果值在k的后面则将k的值改变
  第四步:打印当前答案,转(2),循环n-1次。
【正解程序】
#include<cstdio>
using namespace std;
int n,i,j,a[100010],b[100010],c[100010],t[100010];
int max,k1,k2,k,i1;
int main()
{
 freopen("salesman.in","r",stdin);
 freopen("salesman.out","w",stdout);
 scanf("%d",&n);
 for(i=0;i<n;i++)
  scanf("%d",&a[i]);
 for(i=0;i<n;i++)
  scanf("%d",&b[i]);
 max=k=-1;
 for(i=0;i<n;i++)
 if((a[i]*2)+b[i]>max)
 {
  max=(a[i]*2)+b[i];
  k=i;
 }
 printf("%d\n",max);
 c[n-1]=n-1;
 for(i=n-2;i>=0;i--)
 {
  if(a[i+1]*2+b[i+1]<a[i]*2+b[i])
   c[i]=i;
  else c[i]=c[i+1];
 }
 for(i=0;i<k;i++) t[b[i]]++;
 for(i=1;i<n;i++)
 {
  i1=k1=-1;
  if(k<n-1)
  {
   i1=c[k+1];
   k1=(a[i1]-a[k])*2+b[i1];
  }
  for(j=1000;j>=1;j--)
   if(t[j]>0)
   {
    k2=j;
    --t[j];
    break;
   }
  if(k1>k2)
  {
   max+=k1;
   k=i1;
   printf("%d\n",max);
  }
  else
  {
   max+=k2;
   printf("%d\n",max);
  }
 }
 return 0;
}

转载于:https://www.cnblogs.com/ouqingliang/p/9245336.html

Noip2015普及组第四题 Salesman的解题报告相关推荐

  1. NOIP2015普及组第1题 45 金币 方法三(python3实现)

    OpenJudge - 45:金币 信息学奥赛一本通(C++版)在线评测系统 [NOIP2015 普及组] 金币 - 洛谷 n=int( input() )x=1 #x为每天收到的金币数sum=0t= ...

  2. NOIP2016 普及组第四题 魔法阵magic 题解

    题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有m个魔法物品,编号分别为1,2,-,m.每个物品具有一个魔法值,我们用Xi表示编号为i的物品的魔法值.每 ...

  3. NOIP2016普及组第四题——魔法阵

    题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有m个魔法物品,编号分别为1,2,-,m.每个物品具有一个魔法值,我们用Xi表示编号为i的物品的魔法值.每 ...

  4. 洛谷 P1070 道路游戏(noip 2009 普及组 第四题)

    题目描述 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有 nn个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针顺序依次将这 nn个机器人工厂编 ...

  5. 子矩阵(NOIP2014 普及组第四题)

    描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与 列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第 2.4 行和第 2.4.5 列交叉位置 ...

  6. 2002普及组第四题过河卒

    题目描述 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点.例如 ...

  7. NOIP普及组第1题(1995-2018)

    NOIP1995普及组复赛第1题 https://blog.csdn.net/secret_zz/article/details/76862335 https://blog.csdn.net/WDAJ ...

  8. noip2004普及组第2题 花生采摘

    题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:"欢迎免费品尝我种的花生!――熊字". 鲁宾逊先生和多多都很 ...

  9. 信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏

    [题目链接] ybt 1970:[15NOIP普及组]扫雷游戏 OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏 [题目考点] 1 ...

最新文章

  1. Gartner:人工智能将改变个人设备领域的游戏规则
  2. PSP 2.0降级至1.5详细教程(转)
  3. Python网页抓取、模拟登录
  4. 本地安装Docker
  5. ElementUI的el-table隐藏id列
  6. 树莓派如何接硬盘_利用树莓派和闲置硬盘,搭建起家中的个人网盘
  7. 详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)
  8. Mac常用快捷键组合
  9. 高等数学---不定积分的计算---基本积分法
  10. [敏捷开发实践] 用Sonarqube评估系统中的 Technical Debt (技术债)
  11. APARNET阿帕网
  12. c语言getch常见错误,getch()出错
  13. 【MQTT】MQTT协议学习
  14. 7-20 打印九九口诀表(15 分)
  15. 大疆Tello开发教程
  16. 微博舆情 之 自然语言处理
  17. vulnhub靶场{GoldenEye-v1靶场实战}
  18. 电子邮件营销七大案例
  19. YOLOv5改进添加解耦头、ASFF
  20. Matlab函数trainingOptions参数解析

热门文章

  1. 托马斯·弗里德曼:美政府应研究任正非的提议
  2. 5G与AI深度融合,人类世界即将产生巨变
  3. 我为什么强烈反对程序员加班?
  4. 甲方乙方和站在外包中间的你 | 每日趣闻
  5. 抓紧!抓紧!CSDN年终重榜福利来了~人手一份,快来投稿!!
  6. 腾讯云数据库客户数超50万,携手合作伙伴共建数据库生态
  7. OSPF中virtual-link
  8. Linux安装python3.6
  9. 构建之法阅读笔记01
  10. windows中使用git和开源中国