题目1 : 工作城市分配

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

H公司在北京和上海两个城市各有一间办公室。该公司最近新招募了2N名员工,小Hi负责把这2N名员工分配到北京和上海各N名。

于是小Hi调查了新员工对于北京和上海的意愿,我们用Bi和Si表示。Bi代表如果分配第i名员工去北京,他的满意指数;Si代表如果分配去上海,他的满意指数。

小Hi想知道如何分配才能使2N名员工的满意指数之和最高。

输入

第一行包含一个整数N。

以下2N行每行包含两个整数Bi和Si。

1 ≤ N ≤ 1000

0 ≤ Bi, Si ≤ 100000

输出

一个整数代表最高可能的满意指数之和。

样例输入
2
100 50
80 80
50 100
10 30
样例输出
310

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 const int N = 2200;
 6
 7 struct Node{
 8     int b, s;
 9 }node[N];
10
11 bool cmp(const Node a, const Node b){
12     return (a.b-a.s) > (b.b-b.s);
13 }
14
15 int main()
16 {
17     int n;
18     cin>>n;
19     for(int i = 0; i < 2*n; i++){
20         cin>>node[i].b>>node[i].s;
21     }
22     sort(node, node+2*n, cmp);
23     int ans = 0;
24     for(int i = 0; i < 2*n; i++){
25         if(i < n)ans += node[i].b;
26         else ans += node[i].s;
27     }
28     cout<<ans<<endl;
29
30     return 0;
31 }

View Code

题目2 : 工作城市分配2

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

H公司在北京、上海和纽约三个城市各有一间办公室。该公司最近新招募了3N名员工,小Hi负责把这3N名员工分配到北京、上海和纽约各N名。

于是小Hi调查了新员工对于北京、上海和纽约的意愿,我们用Bi、Si和Ni表示。Bi代表如果分配第i名员工去北京,他的满意指数;Si代表如果分配去上海的满意指数;Ni代表如果分配去纽约的满意指数。

小Hi想知道如何分配才能使3N名员工的满意指数之和最高。

输入

第一行包含一个整数N。

以下3N行每行包含两个整数Bi、Si和Ni。

1 ≤ N ≤ 100

0 ≤ Bi, Si, Ni ≤ 100000

输出

一个整数代表最高可能的满意指数之和。

样例输入
2
100 50 100
80 80  100
50 100 100
10 30 100
80 40 30
20 70 50
样例输出
550

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 const int N = 500;
 6
 7 struct Node{
 8     int b, s, n;
 9 }node[N];
10
11 // dp[i][j][k] 表示前i个人,j个分配到北京,k个分配到上海,i-j-k个分配到纽约的最大满意度
12 int dp[305][105][105];
13
14 int main()
15 {
16     int n;
17     cin>>n;
18     for(int i = 1; i <= 3*n; i++){
19         cin>>node[i].b>>node[i].s>>node[i].n;
20     }
21     memset(dp, 0, sizeof(dp));
22     dp[1][1][0] = node[1].b;
23     dp[1][0][1] = node[1].s;
24     dp[1][0][0] = node[1].n;
25     for(int i = 1; i <= 3*n; i++){
26         for(int j = 0; j <= n; j++){
27             for(int k = 0; k <= n; k++){
28                 if(i-j-k>n || i-j-k<0)continue;
29                 if(j+1<=n)dp[i+1][j+1][k] = max(dp[i+1][j+1][k], dp[i][j][k]+node[i+1].b);
30                 if(k+1<=n)dp[i+1][j][k+1] = max(dp[i+1][j][k+1], dp[i][j][k]+node[i+1].s);
31                 if(i-j-k+1<=n)dp[i+1][j][k] = max(dp[i+1][j][k], dp[i][j][k]+node[i+1].n);
32             }
33         }
34     }
35     cout<<dp[3*n][n][n]<<endl;
36
37     return 0;
38 }

View Code

题目3 : 顺子组合

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

你有一个包含N个整数的数组:A1, A2, ... AN。我们将3个或3个以上数值连续的整数序列称作顺子,例如[1, 2, 3]、[5, 6, 7, 8]和[10, 11, 12, 13, 14, 15, 16]都是顺子。

请你判断A数组是否能拆分成若干个顺子的组合。要求每个整数Ai恰好只属于其中一个顺子。

输入

第一行包含一个整数T代表测试数据的组数。

每组数据第一行包含一个整数N。

每组数据第二行包含N个整数A1, A2, ... AN。

1 ≤ T ≤ 10

1 ≤ N ≤ 10000

0 ≤ Ai ≤ 100000

输出

对于每组数据输出YES或者NO代表是否能拆分成顺子组合。

样例输入
2
7
4 1 3 2 5 4 6
8
4 1 3 2 5 4 6 6
样例输出
YES
NO

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 int book[110000];
 6
 7 bool check(int n){
 8     for(int i = 0; i <= n; i++){
 9         while(book[i]){
10             int len = 0;
11             for(int j = i; j <= n; j++){
12                 len++;
13                 book[j]--;
14                 if(book[j+1] <= book[j])break;
15             }
16             if(len < 3)return false;
17         }
18     }
19     return true;
20 }
21
22 int main()
23 {
24     int T, n, a;
25     cin>>T;
26     while(T--){
27         cin>>n;
28         int len = -1;
29         memset(book, 0, sizeof(book));
30         for(int i = 0; i < n; i++){
31             cin>>a;
32             book[a]++;
33             len = max(len, a);
34         }
35         if(check(len))cout<<"YES"<<endl;
36         else cout<<"NO"<<endl;
37     }
38
39     return 0;
40 }

View Code

题目4 : 栈的加强版

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

请你实现一个加强版的栈,支持以下操作:

push x: 向栈顶加入一个整数x

pop: 从栈顶弹出一个整数,并且输出该整数

inc k x: 将处于栈底的前k个整数加x。

输入

第一行包含一个整数N,代表操作的数量。

以下N行每行一条操作。

1 ≤ N ≤ 200000, 0 ≤ x ≤ 100000, 1 ≤ k ≤ 当前栈的大小

输出

对于每一个pop操作,输出弹出的整数数值。

样例输入
6
push 1
inc 1 2
push 2
inc 2 2
pop
pop
样例输出
4
5

 1 #include <bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 int sk[210000], top, fg[210000];
 6
 7 int main()
 8 {
 9     int n, a, b;
10     cin>>n;
11     string op;
12     top = -1;
13     memset(fg, 0, sizeof(fg));
14     while(n--){
15         cin>>op;
16         if(op=="push"){
17             cin>>a;
18             sk[++top] = a;
19         }else if(op=="inc"){
20             cin>>a>>b;
21             fg[a-1] += b;
22         }else if(op=="pop"){
23             cout<<sk[top]+fg[top]<<endl;
24             fg[top-1] += fg[top];
25             fg[top] = 0;
26             top--;
27         }
28     }
29
30     return 0;
31 }

View Code

转载于:https://www.cnblogs.com/Penn000/p/9601239.html

hihocoder编程练习赛75相关推荐

  1. hihocoder编程练习赛73 A 地铁站

    1 /* 2 Source :hihocoder编程练习73 3 Problem :一个长度为n的串,由若干段1-a[i](假设有Y段)的序列组成,现在中间缺了K个数,问能够还原出来的方案数,需要保证 ...

  2. hihocoder编程练习赛91:相邻字符串

    题目链接 给定一个长度小于1e5的字符串s,s中字符全是大写英语字母.现在要寻找s中有多少组邻近的"hio"字符串,邻近的定义如下:hi距离+io距离+ho距离小于k.输入k和s, ...

  3. 最简真分数c语言,HihoCoder1655 : 第K小最简真分数([Offer收割]编程练习赛39)(唯一分解+容斥定理+二分)(不错的数学题)...

    描述 给一个整数N,请你求出以N为分母的最简(既约)真分数中第K小的是多少? 输入 两个整数N个K. 对于30%的数据,1 <= N <= 1000000 对于100%的数据,1 < ...

  4. 牛客练习赛75 D 减数游戏(队列优化(需要取模的)堆)

    牛客练习赛75 D 减数游戏 思路:写一下式子可以发每次选择最小的两个数进行操作,最后得到的答案会是最大的,那我们可以将它放进一个最小堆中来维护,但是里面的数是需要取模的,当它取模的时候,将会变小.那 ...

  5. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  6. hihocoder [Offer收割]编程练习赛24

    比赛https://hihocoder.com/contest/offers24/problems 应该能拿到个鼠标垫 舒服了 这个oj体验好差,每次都要先因为选错语言CE一发,而且刷新之后还是默认G ...

  7. 【Hihocoder - offer编程练习赛39 - D】前缀后缀查询(后缀字典树,哈希,思维)

    题干: 时间限制:10000ms 单点时限:1000ms 内存限制:512MB 描述 给定一个包含N个单词的字典:{W1, W2, W3, ... WN},其中第i个单词Wi有具有一个权值Vi. 现在 ...

  8. [Offer收割]编程练习赛2 hihocoder 1272 买零食 (DFS 或 dp 水题)

    时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho很喜欢在课间去小卖部买零食.然而不幸的是,这个学期他又有在一教的课,而一教的小卖部姐姐以冷若冰霜著称.第一次去一教小卖 ...

  9. hihocoder offer收割编程练习赛11 B 物品价值

    思路: 状态压缩 + dp. 实现: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> ...

最新文章

  1. Linux 时钟精度 与 PostgreSQL auto_explain (explain timing 时钟开销估算)
  2. Spring教程--IOC(注解方式)和整合junit
  3. Java集合面试问题
  4. 自学成为动画师?你真的准备好了吗?
  5. 计算机网络中什么叫总衰耗_计算机网络中的“带宽”,为什么是指“在单位时间内...
  6. python两数相乘代码_Python 实现大整数乘法算法的示例代码
  7. [除草]BZOJ 1435 [ZJOI2009]多米诺骨牌
  8. paip..net代码生成器使用总结
  9. php二维码与电子名片
  10. VMWare安装Deepin系统
  11. AMD锐龙7 7745HX和i9-12900HX选哪个 r77745HX和i912900HX对比
  12. python 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
  13. android存储pdf文件怎么打开,android打开pdf文件
  14. Springboot 基于CXF构建WebService服务
  15. Matlab求矩阵的最小多项式
  16. python拿到股票代码和代码名称等基本信息
  17. 基于Java+SpringBoot+vue实现图书借阅和销售商城一体化系统
  18. get_calib_data_observ_contours算子说明
  19. 银行家算法之Python实现[操作系统实验]
  20. 买卖股票的最好时机(三)

热门文章

  1. SharePoint 2013的100个新功能之网站管理(二)
  2. 深入浅出Powershell——拷贝GAC中dll文件
  3. Adobe Creative Suite CS4/CS5 全系列注册机
  4. Vs 正则表达式 查找替换 微软权威参考
  5. 《我也能做CTO之程序员职业规划》写作过程重播之二
  6. php中的构造函数和析构函数,php 中构造函数和析构函数
  7. mysql存储过程执行两边_麻烦问下,为什么我的mysql存储过程一次调用,会被执行了两次?...
  8. 小学计算机笔记,小学信息技术教师读书笔记
  9. 点击鼠标左键 自动锁定计算机图标,鼠标一按左键桌面图标就消失了怎么办_为什么按鼠标左键时桌面图标都不见了...
  10. mysql慢查询日志平时开启吗_MySQL开启慢查询日志功能的方法