1160-繁杂的道路
描述
A城是由许多小城镇组成的,在A城的各个小城镇间建了许多道路(道路是双向的)。这些道路是A城便利交通的基础。游客通过这些道路可以在任意两个城镇之间往返。最近市长对这座城市错综复杂的交通感到厌烦,决定重新规划A城的道路。所以他派给你一个任务:留下尽可能少的道路,保证任意两个城镇之间还是可达的。将其他多余的道路全部拆除。
输入
第一行为两个正整数n(1<=n<=100)和m。n表示A城中小城镇的数量。M表示现有道路的数量。接下来是m行,每行用两个数v1和v2表示一条从城镇v1到城镇v2的道路。( v1!=v2),两个城镇之间至多有一条道路。
输出
输出最多能够拆除的道路数量。
样例输入
5 7
4 6
1 2
1 3
1 4
2 3
2 4
3 4
样例输出
3
#include<iostream>
using namespace std;
#define MAXT 1001
#define MAXK 31
inline int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int t,k,i,j;
cin>>t>>k;
int a[MAXT];
int p[MAXT][MAXK];
for(i=1;i<=t;i++)
cin>>a[i];
p[0][0]=0;
for(i=1;i<=t;i++)
{
p[i][0]=p[i-1][0]+a[i]%2;
for(j=1;j<=k;j++)
{
p[i][j]=max(p[i-1][j-1],p[i-1][j])+(j%2==(a[i]-1)?1:0);
}
}
int max=0;
for(j=1;j<=k;j++)
if(p[t][j]>max) max=p[t][j];
cout<<max<<endl;
return 0;
}

浙公网安备 33010602011771号