杭电oj :2037今年暑假不ac 在自己电脑上输出都是对的,提交后就是WA。 帮我看一下算法哪里错了,谢谢。

2024-12-03 10:45:42
推荐回答(1个)
回答1:

这道题应该用贪心的思想来做,每个节目写成一个结构体,将每个节目按照结束的时间升序排序。这个用sort很容易就能办到的,如果不知道怎么用sort对结构体排序,建议先看看sort的使用方法。接下来就是用贪心的思想枚举,枚举出每一个节目作为第一个节目看最多能看多少个。找出其中的最大值就是最多能看的节目数目了。觉得你的程序和解题的思路偏离的比较大啊,看不出你对每个电视节目进行了排序(或者说你的排序写的有问题),也没看出贪心实现。建议按照上面的思路重新写一遍吧。还有搞ACM应该是有看到思路就能用代码实现的能力,而不是动不动就让人帮忙调试代码。应该锻炼一下自己debug的能力。
样例代码,仅供参考:
#include #include
using namespace std;

struct channel{
int start;
int end;
};

int Max(int a, int b);bool Cmp(channel a, channel b);
int main(void){
int i;
int j;
int n;
int num_chan;
int max_chan;

channel last_chan; channel chan[1005];
while ((cin>>n) && (n!=0)) {
max_chan = 0;

for (i=0; i cin >> chan[i].start >> chan[i].end;
}

sort(chan, chan+n, Cmp);
for (i=0; i num_chan = 1;
last_chan = chan[i];

for (j=i; j if (chan[j].start >= last_chan.end)
{
++num_chan;
last_chan = chan[j];
}
}

max_chan = Max(max_chan, num_chan); }
cout << max_chan << endl; }
return 0;}
int Max(int a, int b){
return a > b ? a : b;
}

bool Cmp(channel a, channel b){
return a.end < b.end;
}