标签:++ set 空格 har overflow over code pos bsp
两个球队的支持者要一起坐车去看球,他们已经排成了一列。我们要让他们分乘若干辆巴士,同一辆巴士上的人必须在队伍中是连续的。为了在车上不起冲突,希望两队的支持者人数尽量相等,差至多是D。有一个例外,就是一辆车上的人全部都是一个球队的支持者。问要将这N个人全部送至球场,至少要几辆巴士。
第一行是整数N和D,1<=N<=2500,1<=D<=N。
接下来的N行,按排队的顺序,描述每个人支持的球队,用H或J表示。
至少要几辆巴士。
14 3 H J H H H J H J H H H H H H
2 我们让f[i]表示到第i个人所需的最小的巴士数,在第i个人时,我们向前遍历到j,同时记录两队的人数,若满足条件,则f[i]=f[j-1]+1
2
#include<cstdio> #include<iostream> #include<algorithm> #include<bits/stdc++.h> using namespace std; const int n=3000; int N,D; char a[n]; int f[n]; int a1,a2; int main(){ scanf("%d%d",&N,&D); //memset(f,0x3fffff,sizeof(f)); for(int i=1;i<=N;i++){ scanf(" %c",&a[i]);//在这里一定要注意前面有空格,我当时就错了,搞了半天还是对博客看出来的!!! f[i]=0x7fffff; } f[0]=0; for(int i=1;i<=N;i++){ for(int j=i;j>=1;j--){ if(a[j]==‘H‘)a1++; if(a[j]==‘J‘)a2++; if(a1==0||a2==0||abs(a1-a2)<=D){ f[i]=min(f[i],f[j-1]+1); } } a1=0;a2=0; } printf("%d\n",f[N]); return 0; }
看球的巴士
原文地址:https://www.cnblogs.com/LightyaChoo/p/13062123.html