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. 「七天自制PHP框架」第四天:模型关联

    往期回顾:「七天自制PHP框架」第三天:PHP实现的设计模式,点击此处 原文地址:http://www.cnblogs.com/sweng/p/6624845.html,欢迎关注:编程老头 前阵子在网 ...

  2. const vector<int> 和 vector<const int>问题讨论

    1.const vector <int> vec(10) —— 与const int a[10]是一回事,意思是vec只有10个元素,不能增加了,里面的元素也是不能变化的 vector&l ...

  3. 由于IPv6导致的iOS应用发布失败,是否该怪Azure?

    IPv6已经被越来越广泛的支持了,尤其是苹果强制要求iOS (确切的说是iOS 9以及后续版本)应用必须支持IPv6之后(官方宣布),更将进一步推动IPv6的使用. 不过苹果应用作为客户端强制要求IP ...

  4. 浅谈angular中的promise

    promise目的就是为了跳出回调地狱.老掉牙的东西,大神轻拍. 举个最简单的例子:请求数据(getData),解析数据(executeData),显示数据(showData). //获取数据 fun ...

  5. 【原】无脑操作:Windows 10 + MySQL 5.5 安装使用及免安装使用

    本文介绍Windows 10环境下, MySQL 5.5的安装使用及免安装使用 资源下载: MySQL安装文件:http://download.csdn.net/detail/lf19820717/9 ...

  6. BufferedReaderTest

    package JBJADV003;import java.io.*;public class BufferedReaderTest { /** * @param args */ public sta ...

  7. 谈谈JS构造函数

    //构造函数 //使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法 //当对象被实例化后,构造函数会立即执行它所包含的任何代码 function myObject(msg) ...

  8. C#传入一个时间值,判断年月日时分秒

    /// <summary> /// 功能:某张表的一个时间字段更新的时间停止了多久(和数据库现在的时间比较) /// keyname:数据库参数 ///BGDataService.Quer ...

  9. 使用gulp实现文件压缩及浏览器热加载

    一.安装gulp 首先,你要安装过nodejs,如果没有安装过的同学请自行下载.  先再命令行里输入   npm install gulp -g   下载gulp 二.创建gulp项目 创建一个你需要 ...

  10. Java编程代码性能优化总结

    如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的. 代码优化的目标是: 1.减小代码的体积 2.提高代码运行的效率 ...