#include <iostream>
using namespace std;
int main()
{
/*海滨城市两边分布着N个城市,两边城市唯一对应自己的友好城市,并且只有友好城市才可以设置航线。
要求航线不可以相交,求可以设置的最多航线数。
例如:A: 1 2 3 4 (A 的友好城市为 B)
B: 2 4 1 3
此例子最多可以设置 2 条航线。
动态规划解决,可以求最大不降序列来完成。
a[i] 表示城市 i 对应的友好城市编号。
m[i] 表示城市 i 如果设置航线,则可以设置的最大航线数为 m[i] 。
next[i] 表示城市 i 如果设置航线,则其值为下一个可以设置航线的城市。
*/
freopen("in.txt", "r", stdin);
int n, i, j, k;
int a[100];
int m[100];
int next[100];
memset(next, 0, 100*4);
for(i = 1; i < 100; i++) // m[] 初始化为 1 ,因为至少可以设置一条航线。
m[i] = 1;
cin>>n;
for(i = 1; i <= n; i++)
{
cin>>j;
cin>>a[j];
}
int max = 0;
for(i = n-1; i >= 1; i--) // 从倒数第二个城市开始
{
for(j = i+1; j <= n; j++) // i+1 ... n
{
if( a[i] < a[j] && max < m[j] ) // 可以设置航
动态规划解决航线设置问题
最新推荐文章于 2021-06-30 08:55:09 发布