题意:
给你s(3000)个人,有两个社团,分别招收n和m(n+m<=s)个人,
每个人对这两个社团分别有一个自己的喜爱值(3000),
问怎样安排使得总的喜爱值最大,spj
思路:
如果n+m==s的话,裸的n^2的dp记一下前驱。。然而可以小于的话,
我除了n^3的就没有其他思路了。。。(弱就是弱)
看了看别人的代码,大概懂了,就是先把对第一个社团最喜爱的n个人放入,
然后对于第二个社团,每放一个人,就比较一下:
还没有加入社团的人(1)对第一个社团贡献最大的人的贡献+在第一个社团中的人(2)如果转到第二个社团所得到的最大贡献
和还没有加入这团的人(3)对第二个社团贡献最大的人的贡献做比较
如果前者大,就把(2)从第一个社团调到第二个社团,然后把(1)加入第一个社团
反之则把(3)加入第二个社团。
这样重复m次,就完成了
对于维护这三类,用三个优先队列吧。
/* ***********************************************Author :devil************************************************ */#include #include #include #include #include #include #include #include #include