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

HDU5526/BestCoder Round #61 (div.1)1004 Lie 背包DP的更多相关文章

  1. BestCoder Round #81 (div.2) 1004 String(动态规划)

    题目链接:BestCoder Round #81 (div.2) 1003 String 题意 中文题,上有链接.就不贴了. 思路 枚举起点i,计算能够达到k个不同字母的最小下标j,则此时有子串len ...

  2. BestCoder Round #61 (div.2)

    Numbers Accepts: 571 Submissions: 1212 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/26 ...

  3. BestCoder Round #61 (div.2) C.Subtrees dfs

    Subtrees   问题描述 一棵有N个节点的完全二叉树,问有多少种子树所包含的节点数量不同. 输入描述 输入有多组数据,不超过1000组. 每组数据输入一行包含一个整数N.(1\leq N\leq ...

  4. BestCoder Round #61 (div.2) B.Game 细节题

    Game   问题描述 XY在玩一个游戏:有N根柱子排成一排,编号为1到N,每个柱子上面有一块宝石,现在XY站在第S根柱子上,出口在第T跟柱子上,XY需要拿到所有宝石后从出口离开.每次XY可以走到相邻 ...

  5. HDU5501/BestCoder Round #59 (div.2)The Highest Mark dp+贪心

    The Highest Mark 问题描述 2045年的SD省队选拔,赛制和三十年前已是完全不同.一场比赛的比赛时间有 tt 分钟,有 nn 道题目. 第 ii 道题目的初始分值为 A_i(A_i \ ...

  6. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  7. BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)

    Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  8. BestCoder Round #68 (div.2) tree(hdu 5606)

    tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submis ...

  9. BestCoder Round #11 (Div. 2) 题解

    HDOJ5054 Alice and Bob Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

随机推荐

  1. JVM 优化之逃逸分析

    整理自 周志明<深入JVM> 1, 是JVM优化技术,它不是直接优化手段,而是为其它优化手段提供依据. 2,逃逸分析主要就是分析对象的动态作用域. 3,逃逸有两种:方法逃逸和线程逃逸.   ...

  2. html5——私有前缀

    CSS3的浏览器私有属性前缀是一个浏览器生产商经常使用的一种方式.它暗示该CSS属性或规则尚未成为W3C标准的一部分,像border-radius等属性需要加私有前缀才奏效 1.-webkit-:谷歌 ...

  3. JS——三个运用正则的方法

    trim().replace().search() <script> //trim();去除前后的空格 var str = " 你好 我很好! "; console.l ...

  4. 如何快速获取yun2win app key?

    注册yun2win开发者账号 1.在注册页面输入您的邮箱,点击下方发送,yun2win将会发送一封验证邮件到您的邮箱: 2.如果没有收到邮件请查看垃圾箱或者点击重新发送: 3.打开邮箱查看验证邮件,点 ...

  5. [Windows Server 2003] 服务器安全加固

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:服务器安全加固 ...

  6. 8、scala面向对象编程之对象

    1.  Object 2.伴生对象 3.让object继承抽象类 4.apply方法 5.main方法 6.用object实现枚举功能 1.  Object Object,相当于class的单个实例, ...

  7. java_第一个servlet小程序

    xml中注册: <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>s ...

  8. JS弹出子窗口

    目的 在一个主窗口中,点击一个链接, 弹出一个子窗口 , 父窗口保留 在子窗口中点击关闭, 关闭子窗口. 子窗口的位置位于屏幕的中间 实现 main.html <!DOCTYPE html> ...

  9. EasyUI, Dialog 在框架页(ifrmae)的Top页面弹出时,拖拽Dialog边缘(以改变窗口大小),UI界面被卡死的解决办法

    将Dialog的modal属性设置为true,可以解决卡死的问题(但会给用户使用体验带来影响) var par = { title: This.title, width: This.width, he ...

  10. JAVA学习总结-常用数据结构

    java中集合框架其实就是数据结构的实现的封装; 参考资料:任小龙教学视频 1,什么是数据结构? 数据结构是计算机存储,组织数据的方式; 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合; ...