zoukankan      html  css  js  c++  java
  • 2019/2/13测试(noip2016提高组day1原题)

    除了第一个题较水,后两个题还是有点难度

    题目 A: 玩具迷题

    一个模拟题,没什么好说的
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int maxn =1e5+10;
     5 
     6 int n,m;
     7 
     8 char mz[maxn][12];
     9 int zx[maxn];
    10 int main(){
    11     scanf("%d%d",&n,&m);
    12     for(int i=1;i<=n;i++){
    13         scanf("%d",zx+i);
    14         scanf("%s",mz[i]);
    15     }
    16     int pos=1;
    17     for(int i=1;i<=m;i++){
    18         int a,b;
    19         scanf("%d%d",&a,&b);
    20         if(a==0) {
    21             if(zx[pos]==0){
    22                 pos-=b;if(pos<1) {
    23                     pos%=n;pos+=n;
    24                 }
    25             }
    26             else {
    27                 pos+=b;if(pos>n) pos%=n;
    28             }
    29         }
    30         else {
    31             if(zx[pos]==0){
    32                 pos+=b;if(pos>n) pos%=n;
    33             }
    34             else {
    35                 pos-=b;if(pos<1) pos%=n,pos+=n;
    36             }
    37         }
    38     }
    39     printf("%s",mz[pos]);
    40     return 0;
    41 }

    题目 B: 天天爱跑步

    这道题还是没写出来,只会用暴力骗分。。。

    题目 C: 换教室

    一个期望dp,当时没怎么做过期望dp的题,所以这题也只能骗分了
    考完后讲了思路,调了一下午才调出来,很多细节的问题
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 2010;
     4 inline int read(){
     5     int x=0,f=1;char ch=getchar();
     6     while(ch>'9'||ch<'0') {if(ch=='-') f=-1;ch=getchar();}
     7     while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}
     8     return x*f;
     9 }
    10 
    11 int n,m,v,e,c[maxn],d[maxn],dis[310][310];
    12 
    13 double k[maxn],dp[maxn][maxn][2];
    14 
    15 int main(){
    16     freopen("in.txt","r",stdin);
    17     n=read(),m=read(),v=read(),e=read();
    18     for(int i=1;i<=n;i++) c[i]=read();
    19     for(int i=1;i<=n;i++) d[i]=read();
    20     for(int i=1;i<=n;i++) scanf("%lf",k+i);
    21     memset(dis,0x3f,sizeof(dis));
    22     for(int i=1;i<=v;i++) dis[i][i]=0;
    23     for(int i=1;i<=e;i++){
    24         int x=read(),y=read();
    25         dis[x][y]=dis[y][x]=min(dis[x][y],read());
    26     } 
    27     for(int kk=1;kk<=v;kk++)
    28         for(int i=1;i<=v;i++)
    29             for(int j=1;j<=v;j++) 
    30                 dis[i][j]=min(dis[i][j],dis[i][kk]+dis[kk][j]);
    31     for(int i=1;i<=n;i++) 
    32         for(int j=0;j<=m;j++) dp[i][j][0]=dp[i][j][1]=999999999;
    33     dp[1][0][0]=dp[1][1][1]=0;
    34     for(int i=2;i<=n;i++){
    35         for(int j=0;j<=min(i,m);j++){
    36             dp[i][j][0]=min(dp[i-1][j][0]+dis[c[i-1]][c[i]],dp[i-1][j][1]+dis[d[i-1]][c[i]]*k[i-1]+dis[c[i-1]][c[i]]*(1-k[i-1]));
    37             if(j!=0)
    38             dp[i][j][1]=min(dp[i-1][j-1][0]+dis[c[i-1]][d[i]]*k[i]+dis[c[i-1]][c[i]]*(1-k[i]),
    39             dp[i-1][j-1][1]+dis[d[i-1]][d[i]]*k[i-1]*k[i]+dis[d[i-1]][c[i]]*k[i-1]*(1-k[i])+dis[c[i-1]][d[i]]*k[i]*(1-k[i-1])+dis[c[i-1]][c[i]]*(1-k[i])*(1-k[i-1]));              
    40         }
    41     }
    42     double ans=999999999;
    43     for(int i=0;i<=m;i++) ans=min(dp[n][i][0],min(dp[n][i][1],ans));
    44     printf("%.2f",ans);
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    OpenCV 机器学习之 支持向量机的使用方法实例
    Lua中调用C函数(lua-5.2.3)
    我的Hook学习笔记
    几种开源分词工具的比較
    利用JasperReport+iReport进行Web报表开发
    移动前端开发者必知必会:移动设备概述
    图表插件--jqplot交互演示样例
    算法之二叉树各种遍历
    repo的小结
    sqlite3经常使用命令&amp;语法
  • 原文地址:https://www.cnblogs.com/plysc/p/10371700.html
Copyright © 2011-2022 走看看