BC #42 (1-3题)

链接 :



http://acm.hdu.edu.cn/search.php?field=problem&key=BestCoder+Round+%2342&source=1&searchmode=source

第一题 : 水题。

#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#define lson o<<1,l,m
#define rson o<<1|1,m+1,r
#define mem(a) memset(a,0,sizeof(a))
typedef __int64 ll;
const int N = 1000005;
const int M = 10005;
const ll mod = 1000000007;
const double PI = acos(-1.0);
using namespace std;

int n;
int a[40][40];

int main() {

//    freopen("in.txt", "r", stdin);

    while(cin >> n) {

        int cnt = 0;
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                cin >> a[i][j];
                if(a[i][j]) cnt++;
            }
        }

        int ans = 2 * n + cnt;
        cout << ans << endl;

    }

    return 0;
}

第二题 : 分别对树的高度 和 查询的高度排序。然后对于每个查询高度从小到大扫描 遇到相等的树的高度就记录id (最后输出要按照原序)

#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#define lson o<<1,l,m
#define rson o<<1|1,m+1,r
#define mem(a) memset(a,0,sizeof(a))
typedef __int64 ll;
const int N = 100005;
const int M = 10005;
const ll mod = 1000000007;
const double PI = acos(-1.0);
using namespace std;

int n, m;
struct C {
    int h, id;
} a[N], q[N];
int ans[N];
bool cmp(C x, C y) {
    if(x.h != y.h) return x.h < y.h;
    return x.id < y.id;
}

int main() {

//    freopen("in.txt", "r", stdin);

    while(cin >> n >> m) {

            for(int i = 0; i < n; i++) {
                scanf("%d", &a[i].h);
                a[i].id = i;
            }        

            sort(a, a+n, cmp);

            for(int i = 0; i < m; i++) {
                scanf("%d", &q[i].h);
                q[i].id = i;
            }

            sort(q, q+m, cmp);

            int p = 0;
            for(int i = 0; i < m; i++) {
                while(a[p].h < q[i].h && p < n-1) p++;
                if(a[p].h == q[i].h) {
                    ans[q[i].id] = a[p].id+1;
                    p++;
                    //printf("%d", a[p].id+1);
                } else {
                    //printf("-1");
                    ans[q[i].id] = -1;
                }
                //puts("");
            }
            for(int i = 0; i < m; i++) {
                printf("%d\n", ans[i]);
            }

    }

    return 0;
}

第三题 : 01背包 判断当前dp[][][k] 是否可达 k 代表当前的价值。

#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <stack>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#define lson o<<1,l,m
#define rson o<<1|1,m+1,r
#define mem(a) memset(a,0,sizeof(a))
typedef __int64 ll;
const int N = 100005;
const int M = 10005;
const ll mod = 1000000007;
const double PI = acos(-1.0);
using namespace std;

int n, m, k;
int a[110][110];
int f[110][110][110];

int main()
{
  while(~scanf("%d %d %d", &n, &m, &k))  {
    for(int i = 1; i <= n; i++)
      for(int j = 1; j <= m; j++)
                scanf("%d", &a[i][j]);

    mem(f);
    f[0][1][0] = f[1][0][0] = 1;

    for(int i = 1; i <= n; i++)  {
      for(int j = 1; j <= m; j++) {
        for(int p = 0; p <= k; p++) {
          f[i][j][p] |= f[i-1][j][p] | f[i][j-1][p];
          if(p >= a[i][j]) f[i][j][p] |= f[i-1][j][p-a[i][j]] | f[i][j-1][p - a[i][j]];
        }
      }
    }
    int ans = 0;
    for(int i = k; i >= 0; i--)
            if(f[n][m][i]) {
                ans = i;
                break;
            }
    cout << ans << endl;
  }
  return 0;
}
时间: 2024-10-09 20:40:15

BC #42 (1-3题)的相关文章

hdu 5233 Gunner II (bc #42 B)

Gunner II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1433    Accepted Submission(s): 540 Problem Description Long long ago, there was a gunner whose name is Jack. He likes to go hunting ver

hdu 5234 (bc #42 C)Happy birthday(dp)

Happy birthday Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 672    Accepted Submission(s): 302 Problem Description Today is Gorwin’s birthday. So her mother want to realize her a wish. Gorwin

hdu 5234 happy birthday (bc #42 C) (DP)

Happy birthday Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 672    Accepted Submission(s): 302 Problem Description Today is Gorwin’s birthday. So her mother want to realize her a wish. Gorwin

hdu 5366 The mook jong 动态规划(BC 50 C题)

比赛的时候还是没做出来,BC又是做一题,估计又是要掉分了,慢慢提升,总会终结一题的命运... 思路: 动态规划,然而我刚开始学,并不会做啊...先是找规律找了半天,结果啥也没找出来,又开始深搜, 结果样例能过,交上超时了,深度太大啊,没有正确估算...赛后看了题解,动态规划真是神算法啊,简单几行就 搞定了.设一个数组d[n]表示地板总数(n>3)然后列出状态转移方程d[n] = d[n-1] + (d[n-3] + 1);可以 这样理解,n是在n-1个地板上加上一个地板,我们可以对这个新增的地板

hdu_2043_水题

密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 28587    Accepted Submission(s): 11412 Problem Description 网上流传一句话:"常在网上飘啊,哪能不挨刀啊-".其实要想能安安心心地上网其实也不难,学点安全知识就可以.首先,我们就要设置一个安全的密码.那什么样的密码才叫

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

第七届蓝桥杯省赛C/C++B组赛题及答案

第一题 [题目] 煤球数目 有一堆煤球,堆成三角棱锥形.具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球? 请填表示煤球总数目的数字.注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字. [提示] 找出每一层煤球个数的规律,循环累加计算 [答案] 1 #include<stdio.h> 2 int main() 3 { 4 int i,s=1,num=1; 5 for(i=2;i&

HDU 5156 - Harry and Christmas tree (dfs序+离线树状数组)

http://acm.hdu.edu.cn/showproblem.php?pid=5156 BC#25的C题. 题意是:给出一颗大小为n的树,以1为根,然后给出m次染色,每次将节点u加上一种颜色(一个节点可以有多个颜色). 最后查询树上每个节点对应子树上包含的不同颜色数量. 当时这场比赛没有做,回来看一下题目,没看标解就试着敲了一遍,于是解题思路从一开始就走上了不归路. 标解是O(n+m)的方法,主要思路是将问题转为:一次染色表示将u到根节点的路径都染上这种颜色. 但这样做需要去重,因为如果u

hdu 5311(暴力)

题意:要求在一个字符串中找出三段,然后能拼成一个固定的单词,问是否可行 BC周年庆第二题,我枚举了那个单词的切断位置,然后到给的字符串里分别找,然后就没有然后了``` 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<math.h> 5 using namespace std; 6 7 char s[105]; 8 char t[15]=" anniv