• CF 500 C. New Year Book Reading 贪心 简单题


    New Year is coming, and Jaehyun decided to read many books during 2015, unlike this year. He has n books numbered by integers from 1 to n. The weight of the i-th (1 ≤ i ≤ n) book is wi.

    As Jaehyun's house is not large enough to have a bookshelf, he keeps the n books by stacking them vertically. When he wants to read a certain book x, he follows the steps described below.

    1. He lifts all the books above book x.
    2. He pushes book x out of the stack.
    3. He puts down the lifted books without changing their order.
    4. After reading book x, he puts book x on the top of the stack.

    He decided to read books for m days. In the j-th (1 ≤ j ≤ m) day, he will read the book that is numbered with integer bj(1 ≤ bj ≤ n). To read the book, he has to use the process described in the paragraph above. It is possible that he decides to re-read the same book several times.

    After making this plan, he realized that the total weight of books he should lift during m days would be too heavy. So, he decided to change the order of the stacked books before the New Year comes, and minimize the total weight. You may assume that books can be stacked in any possible order. Note that book that he is going to read on certain step isn't considered as lifted on that step. Can you help him?

    Input

    The first line contains two space-separated integers n (2 ≤ n ≤ 500) and m (1 ≤ m ≤ 1000) — the number of books, and the number of days for which Jaehyun would read books.

    The second line contains n space-separated integers w1, w2, ..., wn (1 ≤ wi ≤ 100) — the weight of each book.

    The third line contains m space separated integers b1, b2, ..., bm (1 ≤ bj ≤ n) — the order of books that he would read. Note that he can read the same book more than once.

    Output

    Print the minimum total weight of books he should lift, which can be achieved by rearranging the order of stacked books.

    Sample test(s)
    input
    3 5
    1 2 3
    1 3 2 3 1
    output
    12
     

    题意:有n本书,编号为1~n,每一本书的重量为w[i],这堆书竖直堆在一起

    现在有m天,第i天会从中拿出编号为day[i]的书看,代价是day[i]上面的书的总重量,书一天看完,看完后放在最上面。

    问:最开始的时候你按照什么顺序放书,会让你这m天要搬的书的总重量最小。

    贪心可知,拿每一本书第一次出现的序列作为初始序列,没有出现的序列放在最下面,不用管了。

    用一个vector存放这个序列,看完后放在最上面删除,插入到最上面。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<vector>
     4 #include<iostream>
     5 
     6 using namespace std;
     7 
     8 #define ll long long
     9 #define pb push_back
    10 
    11 bool vis[505];
    12 int w[505];
    13 int day[1005];
    14 vector<int>v;
    15 
    16 int main()
    17 {
    18     int n,m;
    19     scanf("%d %d",&n,&m);
    20     for(int i=1;i<=n;i++){
    21         scanf("%d",&w[i]);
    22     }
    23     memset(vis,false,sizeof vis);
    24     for(int i=1;i<=m;i++){
    25         scanf("%d",&day[i]);
    26         if(!vis[day[i]]){
    27             v.pb(day[i]);
    28             vis[day[i]]=true;
    29         }
    30     }
    31     int ans=0;
    32     for(int i=2;i<=m;i++){
    33         int j=0;
    34         for(;v[j]!=day[i];j++){
    35             ans+=(ll)(w[v[j]]);
    36         }
    37         v.erase(v.begin()+j);
    38         v.insert(v.begin(),day[i]);
    39     }
    40 
    41     printf("%d
    ",ans);
    42 
    43     return 0;
    44 }
    View Code
  • 相关阅读:
    Struts2中ModelDriven的使用
    Android 如何让 app 自行处理 power key M
    url后面带斜杠与不带斜杠的区别
    Http Request Method:options
    org.springframework.boot.builder.SpringApplicationBuilder.<init>
    Uncaught (in promise) DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL
    git将多个commit合并成一个
    idea error:Command line is too long
    java使用zxing插件绘制二维码
    git解决冲突插件之Beyond Compare
  • 原文地址:https://www.cnblogs.com/-maybe/p/4799668.html
Copyright © 2020-2023  润新知