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. 如果导入的项目只有源码,可以将其他项目中的.classpath 和 .project复制到根目录下即可。

    如果导入的项目只有源码,没有对应的项目配置如web项目,可以将其他项目中的.classpath 和 .project复制到根目录下即可.

  2. SharePoint 2016 每天预热脚本介绍

    使用SharePoint的朋友们应该知道,SharePoint每天夜里有自动回收的机制,使环境每天把占用的内存都释放出来,以确保不会累计占用过多内存导致服务器崩溃. 我们可以打开IIS,选中我们的应用 ...

  3. [leetcode-551-Student Attendance Record I]

    You are given a string representing an attendance record for a student. The record only contains the ...

  4. 【LeetCode】98. Validate Binary Search Tree

    题目: Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is define ...

  5. 【LeetCode】66. Plus One

    题目: Given a non-negative number represented as an array of digits, plus one to the number. The digit ...

  6. powershell 统计AD中所有计算机及对应的操作系统信息

    要想用powershell管理域,首先先加载activedirectory模块 PS C:\> import-module activedirectory 下面就可以利用get-adcomput ...

  7. Go学习笔记(一)Let's 干

    加 Golang学习 QQ群共同学习进步成家立业 ^-^ 群号:96933959 简介     Go是Google开发的一种 静态强类型.编译型,并发型,并具有垃圾回收功能的编程语言.为了方便搜索和识 ...

  8. 访问Access日期字段

    在使用sql访问Access日期字段,应在变量前后加#,例子: s:=Format(select xueshID,name,times,qukbz,skdate,banji from dianmjil ...

  9. mybatis代理类Demo

    前言 简单实现通过代理接口来实现对数据的查询demo,也是对mybatis的一个熟练.首先是编写接口代理. public interface IBookMapper { List<BookMod ...

  10. 使用URLConnection调用axis1.4开发的webservice

    写在前面: 调用webservice的方式有很多:1.直接在客户端使用工具生成客户端代码,将代码拷进项目中调用即可:2.使用对应的webservice框架来进行调用,比如如果我们我的服务端开发用的是a ...