• 赛后补题:暑期集训


    BAPC 2014 Preliminary

    D. Lift Problems

    https://nanti.jisuanke.com/t/28204

    题意:给一串数字代表每个楼层的人数,如果电梯停在某一层,那么愤怒值增加相当于后面没到的人数;如果电梯过了某一层没停,那么愤怒值增加这层楼层到下一次停靠楼层差与这层要下电梯人数的乘机。

    思路:动态规划。

    用A[i]表示到达楼层i的最小愤怒值,则有:

    其中,第二项表示的是停靠在某一层过站人的愤怒,第三项表示没到人的愤怒。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int main(){
     5     int t,n,dp[1510],a[1510];
     6     scanf("%d",&t);
     7     while(t--){
     8         memset(dp,0x3f,sizeof(dp));
     9         memset(a,0,sizeof(a));
    10         int sum=0;
    11         scanf("%d",&n);
    12         for(int i=1;i<=n;i++){
    13             scanf("%d",&a[i]);
    14             sum+=a[i];
    15         }
    16         dp[0]=0;
    17         for(int i=1;i<=n;i++){
    18             sum-=a[i];
    19             int k=0;
    20             for(int j=i-1;j>=0;j--){
    21                 dp[i]=min(dp[i],dp[j]+sum+k);
    22                 k=k+(i-j)*a[j];
    23             }
    24         }
    25         printf("%d
    ",dp[n]);
    26 
    27     }
    28 }
    View Code

    Benelux Algorithm Programming Contest 2014 Final

     B. Button Bashing

    题意:n个按钮,每个按钮可以加减一定时长,求0到大于等于给定数字m需要至少多少次按钮,并求出最少超出时间。

    做法:bfs打出3600秒内可达时间及次数。

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 int tim[20],vis[3610];
     4 int con,n,m;
     5 
     6 int main(){
     7     int t;
     8     scanf("%d",&t);
     9     
    10     while(t--){
    11         
    12         memset(vis,0x3f,sizeof(vis));
    13         vis[0]=0;
    14         con=0;
    15         scanf("%d%d",&n,&m);
    16         for(int i=0;i<n;i++){
    17             scanf("%d",&tim[i]);
    18         }
    19         queue<int> q;
    20         q.push(0);
    21         while(!q.empty()){
    22             int now=q.front();
    23             q.pop();
    24             for(int i=0;i<n;i++){
    25                 int next=now+tim[i];
    26                 if(next<0)next=0;
    27                 if(next>3600)next=3600;
    28                 if(vis[next]<=vis[now]+1)continue;
    29                 vis[next]=vis[now]+1;
    30                 q.push(next);
    31             }
    32         }
    33         int z;
    34         for(z=m;z<=3600;z++){
    35             if(vis[z]!=0x3f3f3f3f){
    36                 break;
    37             }
    38         }
    39         printf("%d %d
    ",vis[z],z-m);
    40     }
    41     return 0;
    42 }
    View Code
  • 相关阅读:
    MicroPython实例之TPYBoard v102炫彩跑马灯WS2812B
    MicroPython实例之TPYBoardv102自动浇花系统
    Micropython实例之DIY超声波避障小车
    MicroPython支持图形化编辑了:Python Editor带你轻松玩转MicroPython
    潍坊首个小学“教育创客空间”落户呼家庄小学 萝卜(创客)教育走进小学课堂
    Micropython TPYBoard I2C的用法
    JDK5.0新特性-反射
    JDK5.0新特性-枚举
    JDK5.0新特性-泛型
    JDK5.0新特性-静态导入
  • 原文地址:https://www.cnblogs.com/bestefforts/p/9389169.html
Copyright © 2020-2023  润新知