Lie

 
问题描述
一个年级总共有N个学生,每个人属于唯一一个班级。现在他们站在一排,同班同学并不一定会站在一起,但每个人都会说一句话:“站在我左边的有Ai个同班同学,右边有Bi个同班同学”。然而并不是每个人都会说真话,老师也忘了他们说话的顺序,现在老师想知道最多有多少人的话同时不矛盾。
输入描述
输入有多组数据,不超过100组.
每组数据第一行包含一个整数N.(1\leq N\leq 1000 )(1≤N≤1000)
随后N行,每行包含两个数字Ai和Bi.(0\leq Ai,Bi\leq 1000 )(0≤Ai,Bi≤1000)
输出描述
对于每组数据输出一行答案.
输入样例
3
0 2
2 0
3 0
5
0 0
1 0
0 0
0 0
0 0
输出样例
2
4
 
 

题解:根据左右边同班同学的人数可以得知其班级人数和其在班上相对位置,只有班级人数相同才可能为同一个班级,而在同一个班级的人出现矛盾的只能是班上相对位置相同。先根据班级人数排序,对于班级人数相同的统计每个相对位置上有多少人,枚举人数为x的班级有y个,当y确定的时候就可以贪心得出最大不矛盾数量。这就转化成了分组背包,最后使得挑选出来的年级人数不超过N即可。复杂度O({n}^{2})O(n​2​​).

///
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
inline ll read()
{
ll x=,f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')f=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
//****************************************
#define maxn 1999+5
#define mod 1000000007
struct ss{
int l,r,s;
}a[maxn];
int cmp(ss s1,ss s2){
return s1.s<s2.s;
}int n,H[maxn];
vector<int >G[maxn],A;
int V[maxn];
vector< pair<int ,int > >ans;
int main()
{
while(scanf("%d",&n)!=EOF){mem(V);
for(int i=;i<=n;i++){
scanf("%d%d",&a[i].l,&a[i].r);
a[i].s=a[i].l+a[i].r+;
}int k=;
for(int i=;i<=;i++)G[i].clear();
A.clear();ans.clear();
sort(a+,a+n+,cmp);
for(int i=;i<=n;i++){
G[a[i].s].push_back(a[i].l+);
if(!V[a[i].s])
A.push_back(a[i].s);V[a[i].s]=;
}mem(H);
for(int i=;i<A.size();i++){int maxx=;
for(int j=;j<G[A[i]].size();j++){
H[G[A[i]][j]]++;maxx=max(maxx,H[G[A[i]][j]]);
}
while(maxx){
int ab=;
for(int j=;j<=A[i];j++){
if(H[j]) ab++,H[j]--;
}
ans.push_back(make_pair(A[i],ab));
maxx--;
}
}int dp[maxn];mem(dp);
for(int i=;i<ans.size();i++){
for(int j=n;j>=ans[i].first;j--){
dp[j]=max(dp[j],dp[j-ans[i].first]+ans[i].second);
}
}
cout<<dp[n]<<endl;
}
return ;
}

31ms

最新文章

  1. HP 820 G2变色龙安装10.11.6基本完美
  2. 表单和 HTML 辅助方法&ndash; ASP.NET MVC 4 系列
  3. iOSapp的json告示
  4. 替换空格-请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
  5. sql 取时间 问题集
  6. c++实现之 -- 汉语词语的简单处理
  7. WPF 中 TreeListView 的使用
  8. How To Set Dark Theme in Visual Studio 2010
  9. Css攻克Selectors 一
  10. Java多线程Master-Worker模式
  11. [Python]Python中的包(Package)
  12. 写给自己看的新手java-环境配置
  13. React中this.setState是同步还是异步?为什么要设计成异步?
  14. 芯灵思Sinlinx A64 linux 通过设备树写LED驱动(附参考代码,未测试)
  15. Android之.9图的知识
  16. deepin下codeblocks更改调试终端
  17. Shell教程 之数组
  18. 第三周作业(一)VS安装及单元测试练习
  19. IIS的安装和配置
  20. vsftpd服务器配置虚拟用户

热门文章

  1. JS压缩图片(canvas),返回base64码
  2. Android 微信分享不出去?四步搞定!
  3. [Android]异常1-duplicate files during packaging of
  4. 转 IDEA 解决代码提示功能消失
  5. C# 打开模态对话框 和打开文件夹
  6. 关于react框架的一些细节问题的思考
  7. Java程序员怎么不断进阶 必须要掌握哪些技能
  8. bootstrap中chosen控件样式有时会冲突
  9. HDU 2414 Chessboard Dance(模拟题,仅此纪念我的堕落)
  10. 在引入的css或者js文件后面加参数的作用