NOIP 2001 提高组 题解

No 1. 一元三次方程求解

https://vijos.org/p/1116

看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~

数据小 暴力枚举即可

 double a,b,c,d;
 double x;

 int main()
 {
     ios_base::sync_with_stdio();

     cin>>a>>b>>c>>d;

     ;i<=;i+=)
     {
         x=i/;

         if(abs(a*x*x*x+b*x*x+c*x+d)<0.01)
         {
             printf("%.2f ",x);
         }
     }

     ;
 }

No 2. 数的划分

https://vijos.org/p/1117

dp/dfs

dp

用f(i,j)表示i这个数分成k份有多少种分法

毫无疑问

f[i][j]=f[i-][j-]+f[i-j][j];

因为 f(i,j) 可以从 f(i-1,j-1)推出

又要保持不下降的分划

所以可以从f(i-j,j)推出
 int n,k;
 ][];

 void init()
 {
     cin>>n>>k;

     ;i<=n;i++)
     {
         ;j<=i;j++)
         {
             f[i][j]=inf;
         }
     }

     ;i<=n;i++)
     {
         f[i][]=;
     }
 }

 int main()
 {
     init();

     ;i<=n;i++)
     {
         ;j<=i;j++)
         {
             f[i][j]=f[i-][j-]+f[i-j][j];
         }
     }

     cout<<f[n][k]<<endl;

     ;
 }

dfs

暴力枚举

只要不下降+剪枝就可以了

 int n,k;
 int ans;

 void dfs(int nw,int sum,int num)
 {
     if(num==k)
     {
         if(sum==n)
         {
             ans++;
         }
         else
         {
             return;
         }
     }

     if(sum==n)
     {
         return;
     }

     for(int i=nw;i<=n-sum;i++)
     {
         dfs(i,sum+i,num+);
     }

     return;
 }

 int main()
 {
     ios_base::sync_with_stdio();

     cin>>n>>k;

     ;i<=n/;i++)
     {
         dfs(i,i,);
     }

     cout<<ans<<endl;

     ;
 }

No 3. 统计单词个数

https://vijos.org/p/1118

dp

这几年dp考的好多啊

这题题解我真的不会写 我的写法我自己都看不懂

复制一段

划分这个DP,很基础。

然后,是sum[i][j],第i个字母到第j个字母一共可以形成多少个单词,ccy也用的Dp。

sum[i][j]=sum[i][-1]+(包含可以添加最后一个字母j的单词的总个数)。

ccy,WA在……比如现在可以添加一个新单词,k到j,但是,若果以k为起点,在sum[i][j-1]中已经有过单词,该新单词就不添加。于是乎,ccy光荣地WA掉一个点,因为,

那个点有两个相同的单词,我就扩展了两次。

 string s;
 int slen;
 string words[maxm];
 int wordslen[maxm];
 int f[maxn][maxm];
 int sum[maxn][maxn];
 int n,k,m;

 void init()
 {
     string tmp;
     cin>>n>>k;
     ;i<=n;i++)
     {
         cin>>tmp;
         s+=tmp;
     }
     slen=s.size();
     cin>>m;
     ;i<=m;i++)
     {
         cin>>words[i];
         wordslen[i]=words[i].size();
     }
 }

 int add(int l,int r)
 {
     ;
     >=) ans=sum[l][r-];
     };
     ;i<=m;i++)
     {
         ;
         if (qd<l) continue;
         if (qd==s.find(words[i],qd))
         {
             if (vis[qd]) continue;
             vis[qd]=;
             ans++;
             ;j<=m;j++)
             {
                 int dq=r-wordslen[j];
                 if (dq==qd)
                     if (dq==s.find(words[j],dq))
                     {
                         ans--;
                         break;
                     }
             }
         }
     }
     return ans;
 }

 void gsum()
 {
     ;i<=slen-;i++)
         ;j++)
         {
             sum[i][j]=add(i,j);
         }
 }

 void work()
 {
     ;i<=slen-;i++)
         f[i][]=sum[][i];
     ;i<=slen-;i++)
         ;j<=min(k-,i+);j++)
             ;u<=i-;u++)
                 f[i][j]=max(f[i][j],f[u][j-]+sum[u+][i]);
     ;
     )
         ans=sum[][slen-];
     else
         ;i<=slen-;i++)
             ans=max(ans,f[i][k-]+sum[i+][slen-]);
     printf("%d\n",ans);
 }

 int main()
 {
     int qn;
     qn=;
     while(qn--)
     {
         init();
         gsum();
         work();
     }

     ;
 }

No 4. Car的旅行路线

https://vijos.org/p/1119

简单的Dijkstra就可以过了

直接贴代码

 struct sb
 {
     int x,y,c;
 } pos[];
 ];
 ];
 ],y[],costt[];
 double dis(int x,int y)
 {
     double k;
     k=sqrt(pow(pos[x].x-pos[y].x,)+pow(pos[x].y-pos[y].y,));
     if(pos[x].c==pos[y].c)
         k*=costt[pos[x].c];
     else
         k*=costf;
     return k;
 }
 double dij(int st)
 {
     double min,k;
     int i,j,p;
     memset(b,,sizeof(b));
     memset(d,,sizeof(d));
     d[st]=;
     ; i<=tot; i++)
     {
         min=1e38;
         ; j<=tot; j++)
             if(!b[j]&&d[j]<min)
             {
                 min=d[j];
                 p=j;
             }
         b[p]=;
         ; j<=tot; j++)
             if(!b[j])
                 d[j]=d[j]>d[p]+dis(p,j)?d[p]+dis(p,j):d[j];
     }
     k=1e38;
     ; i<=tot; i++)
     {
         if(pos[i].c==ed)
             ; j<=; j++)
                 k=d[i+j]<k?d[i+j]:k;
         if(pos[i].c==ed)
             break;
     }
     return k;
 }
 main()
 {
     cin>>tc;
     double min=1e38;
     int i,j,k;
     while(tc)
     {
         cin>>n>>costf>>st>>ed;
         ; i<=n; i++)
         {
             cin>>x[]>>y[]>>x[]>>y[]>>x[]>>y[]>>costt[i];
             ; j<=; j++)
                 ; k<=; k++)
                     -k-j]-x[j])+(y[j]-y[k])*(y[-k-j]-y[j])==)
                     {
                         x[]=x[k]+x[-k-j]-x[j];
                         y[]=y[k]+y[-k-j]-y[j];
                     }
             ; j<=; j++)
             {
                 pos[++tot].x=x[j];
                 pos[tot].y=y[j];
                 pos[tot].c=i;
             }
         }
         ; i<=tot; i++)
         {
             if(pos[i].c==st)
                 ; j<=; j++)
                     min=dij(i+j)<min?dij(i+j):min;
             if(pos[i].c==st)
                 break;
         }
         printf("%.1lf",min);
         tc--;
     }

     ;
 }

The End

NOIP 2001 提高组 题解的更多相关文章

  1. NOIP 2014 提高组 题解

    NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...

  2. NOIP 2000 提高组 题解

    NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...

  3. noip 2016 提高组题解

    前几天写的那个纯属搞笑.(额,好吧,其实这个也不怎么正经) 就先说说day2吧: T1:这个东西应该叫做数论吧. 然而我一看到就照着样例在纸上推了大半天(然而还是没有看出来这东西是个杨辉三角) 然后就 ...

  4. NOIP 2008提高组第三题题解by rLq

    啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...

  5. noip 2014 提高组初赛

    noip 2014 提高组初赛 一. TCP协议属于哪一层协议( ) A. 应用层 B. 传输层 C. 网络层 D. 数据链路层 B TCP(传输控制协议) 若有变量int a; float: x, ...

  6. [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】

    /*====================================================================== [NOIp 1998 提高组]Probelm 2 连接 ...

  7. noip2010提高组题解

    NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...

  8. 【NOIP2018】提高组题解

    [NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕

  9. 最优贸易 NOIP 2009 提高组 第三题

    题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...

随机推荐

  1. win7老是弹出“Windows Media PIayer网络共享服务配置应用程序 已停止工作”

    应是优化软件的时候把服务禁止启动了. 我的电脑 > 管理 > 服务和应用程序 > 服务 Windows Media Player Network Sharing Service 启动 ...

  2. tab切换实现方式2

    tab切换实现方式2: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  3. Mac用ssh登录Ubuntu14.04

    在Ubuntu上配置ssh-server sudo apt-get install openssh-server  然后确认ssh-server是否启动  ps -e | grep ssh 如果存在s ...

  4. 再谈AbstractQueuedSynchronizer:基于AbstractQueuedSynchronizer的并发类实现

    公平模式ReentrantLock实现原理 前面的文章研究了AbstractQueuedSynchronizer的独占锁和共享锁,有了前两篇文章的基础,就可以乘胜追击,看一下基于AbstractQue ...

  5. Android Shape Divider

    安卓框架提供了一种LinearLayout 内部布局元素分割线的实现,建立一个指定长宽的矩形Shape: <?xml version="1.0" encoding=" ...

  6. 解决SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问

    根据需要进行asp.net的数据导入导出,结果报以下错: mark-1: [报错]SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT ...

  7. vijos1010题解

    题目: 话说乾隆带着他的宰相刘罗锅和你出巡江南,被杭州城府邀请去听戏,至于什么戏,那就不知了.乾隆很高兴,撒酒与君臣共享.三更欲回住处,可是乾隆这人挺怪,他首先要到西湖边散散步,而且命令不准有人跟着他 ...

  8. 构建自己的Tomcat镜像

    在很多情况下,我们会不满足于官方提供的Tomcat镜像.比如官方镜像的时区为UTC时间,并不是北京时间:再比如在特定硬件环境下,jdk的随机数生成器初始化过慢问题.此时,我们就会考虑构建自己的Tomc ...

  9. CSS3-loading动画(二)

    上次分享了四个CSS3的加载动画,今天继续(标题接上一次). 在线demo:http://liyunpei.xyz/loading.html   (持续更新) 请注意:代码中的关键帧动画有的用的lin ...

  10. Linux - 请允许我静静地后台运行

    h1,h2,h3,h4,h5,h6,p,blockquote { margin: 0; padding: 0 } body { font-family: "Helvetica Neue&qu ...