zoukankan      html  css  js  c++  java
  • woj1005-holding animals-01pack woj1006-Language of animals-BFS


    title: woj1005-holding animals-01pack
    date: 2020-03-05
    categories: acm
    tags: [acm,woj,pack]

    01背包。中等题。

    description

    The total available floor space on the ark would have been over 100,000 square feet, which would be more floor space than in 20 standard sized
    basketball courts. But in our story, we assume that the land dwelling air breathing animals is so many that the Ark can't contain all of them.

    We know that the size of each kind of animal is different and the God has his own favorite. The God assigns each kind of animal a point to
    show his favorite, and then lists points of every kind of animal to Noah. Noah must let some kinds of animals into the Ark and refuse
    the others to maximize the total points. Noah cries for he doesn't know computer programming.

    It 's an easy problem for you,right? So,rescue Noah!

    输入格式

    There will be multiple test cases. For each test case,the first line contains an integer n(n<=100) representing the number of species of the land
    dwelling air breathing animals all over the world.
    In the next n lines,there will be two integers in each line,separated by a single space,where the first integer shows the size of a kind of animal
    and the second integer shows the point. The size and the point for all the animals will not exceed 10000.
    The last line contains an integer s(s <= 100,000) indicating the size of Noah's Ark.

    输出格式

    For each test case,you should output a line that contains a single integer to describe the maximal point Noah can get.

    样例输入

    2
    10 20
    20 30
    30
    3
    10 20
    30 30
    20 20
    30

    样例输出

    50
    40

    code

    #include<iostream>
    #include<cstring>
    #include<cmath>
    using namespace std;
    
    const int maxn=10005;
    int value[maxn];
    int sizee[maxn];
    int final[100005];
    
    // memset(final,0,sizeof(int)*4); 注意memset是字节为单位,只能赋值0。比如int 4字节0000 0X01010101.
    //速度慢 另外注意一个字节2个16进制数
    // memset(a,0x3f,sizeof(a))
    
    int main(){
        int n=0,noah=0;
        while(cin>>n){
            for(int i=0;i<n;i++){
                cin>>sizee[i]>>value[i];
            }
        cin>>noah;
        for(int i=0;i<=noah;i++) final[i]=0;  
        for(int i=0;i<n;i++)
            for(int j=noah;j>0;j--)   //倒序理解就是01背包只有一件,前i-1件已经判断完了,只判断这一件,在比较小的情况下放不影响在比较大的情况放
                if(j>=sizee[i])         //final可行因为如果小的能放大的也能放。
                    final[j]=max(final[j],final[j-sizee[i]]+value[i]);
            cout<<final[noah]<<endl;
        }
        return 0;
    }
    

    title: woj1006-Language of animals-BFS
    date: 2020-03-05
    categories: acm
    tags: [acm,woj,bfs]

    中等题。
    注意数据很大,边没有权,就BFS,邻接表。

    description

    According to Ernest Mayr, America's leading taxonomist, there are over 1 million species of animals in the world.When all
    kinds of animals took boat,they found a problem.Each kind of animal had its own language,so the communication became
    very hard.Assume that animal A could communicate with animal B but it couldn't communicate with animal C,while animal C
    could only communicate with animal B. So,animal B must translate what one said to the other if animal A and animal C wanted
    to communicate with each other.We called animal B translator.Noah wanted to know the least translators if two animals
    wanted to communicate with each other.

    输入格式

    There will be only one test case.The first line contains two integers n(2 <= n <=200,000) and
    m(1 <= m <= 300,000),where n represents the number of animals and m represents the number of pairs which could
    communicate with each other. The next m lines contains two numbers each,representing two animals who can communicate
    with each other. The number starts at 0.The next line contains a integer k(k<=20) representing the number of queries,and
    the last k lines contains two number each,representing two animals who wanted to communicate with each other.

    输出格式

    For each query,you should output the least translators if two animals in that query wanted to communicate with each other.
    If they couldn't communicate with each other by translating ,output "-1".

    样例输入

    3 2
    0 1
    1 2
    2
    0 0
    0 2

    样例输出

    0
    1

    code

    //数据范围很大,不能用邻接矩阵
    //没有边权,BFS就行,不用最短路
    
    // 建图用链表或者vector
    // BFS用QUEUE DFS用栈
    #include <iostream>
    #include<cstdio>
    #include<vector>
    #include<queue>
    
    using namespace std;
     
    const int  maxn= 200005;  //我傻了  写成20000+5,然后SEGMENTFAULT 
    
    vector<int> mapp[maxn];
    bool visited[maxn];
    
    struct Node {
        int a, len;  //s 到 a的距离 len
        Node(int a, int len) : a(a), len(len) {}
    };
     
    queue<Node> que;
    
    void clearque(queue<Node>& q){
        queue<Node> empty;
        swap(empty, q);
    }
    
    int bfs(int s, int e)
    {
        for(int i=0;i<maxn;i++)
            visited[i]=false;
        visited[s] = true;
        clearque(que);
        que.push(Node(s, 0));
        while(!que.empty()) {
            Node tmp = que.front();
            que.pop();
            if(tmp.a == e) 
                return tmp.len==0?0:tmp.len-1;
            // if(!mapp[tmp.a].empty()) 
            for(vector<int>::iterator iter = mapp[tmp.a].begin(); iter != mapp[tmp.a].end(); iter++) {
                if(!visited[*iter]) {
                    visited[*iter] = true;
                    que.push(Node(*iter, tmp.len + 1));
                }
            }
        }
        return -1;
    }
     
    int main()
    {
        int n=0,m=0,q=0,x=0,y=0;
        while(scanf("%d%d", &n, &m)==2) {
            for(int i=0;i<n;i++)
                mapp[i].clear();
            for(int i=0;i<m;i++){
                scanf("%d%d", &x, &y);  mapp[x].push_back(y);  mapp[y].push_back(x);
            }
            scanf("%d", &q);
            for(int i=0;i<q;i++){
                scanf("%d%d", &x, &y);
                cout<<bfs(x,y)<<endl;
            }
        }
        return 0;
    }
    
    
  • 相关阅读:
    dwz tabs table实现翻页及各tabs查询
    DruidDataSource配置
    利用blob对象实现大文件分片上传
    HTML5 File API 全介绍
    JS获取当前网页内容,创建文件并下载,URL.createObjectURL和URL.revokeObjectURL
    使用 CSS 接收用户的点击事情并对相关节点进行操作
    Flex布局
    background: inherit制作倒影、单行居中两行居左超过两行省略
    层叠顺序与堆栈上下文、font-family字体定义顺序的
    简单使用GA监控网站浏览行为
  • 原文地址:https://www.cnblogs.com/lqerio/p/13485246.html
Copyright © 2011-2022 走看看