ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛
A. Visiting Peking University
题意,一个人去北京旅游,计划待m天,但是其中有一些天交通管制,不能出去,到北京有多少天交通管制,计划待的天数就加几,其中到达北京的第一天和其余m-1天没有交通管制的时刻去参观北京大学,每一天都有一个权值,要求使得求得的权值和最小,问参观北京大学的那两天是哪两天?
暴力枚举的时候,用一个数ans来记录在北京待的天数(不包括交通管制),最后判断一下是否达到m天,中途再记录一下m-1天中最小值的那一天即可
#include <iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int a[1000];
int inf=9999999;
int main()
{
int n,m,num,x,y;
while(~scanf("%d%d",&n,&m))
{
for(int i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
int p;
scanf("%d",&p);
int book[1000]= {0};
while(p--)
{
scanf("%d",&num);
book[num] = 1;
}
int rel = 999999999;
for(int i=0; i<n; i++)
{
if(book[i])continue;
int sum1=a[i],sum2=inf;
int jj;
int k=1;
for(int j=i+1; j<n; j++)
{
if(book[j])continue;
k++;
if(sum2>a[j])
{
sum2=a[j];
jj=j;
}
if(k==m)break;
}
if(k<m)continue;
if(rel>sum1+sum2)
{
x=i;
y=jj;
rel=sum1+sum2;
}
}
printf("%d %d\n",x,y);
}
return 0;
}