NOIP 2001 提高组 题解
NOIP 2001 提高组 题解
No 1. 一元三次方程求解
看见有人认真推导了求解公式,然后猥琐暴力过的同学们在一边偷笑~~~
数据小 暴力枚举即可
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. 数的划分
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. 统计单词个数
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的旅行路线
简单的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 提高组 题解的更多相关文章
- NOIP 2014 提高组 题解
NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...
- NOIP 2000 提高组 题解
NOIP2000 提高组 题解 No 1. 进制转换 https://www.rqnoj.cn/problem/295 水题 对于n和基数r, 每次用n mod r, 把余数按照逆序排列 注意 mod ...
- noip 2016 提高组题解
前几天写的那个纯属搞笑.(额,好吧,其实这个也不怎么正经) 就先说说day2吧: T1:这个东西应该叫做数论吧. 然而我一看到就照着样例在纸上推了大半天(然而还是没有看出来这东西是个杨辉三角) 然后就 ...
- NOIP 2008提高组第三题题解by rLq
啊啊啊啊啊啊今天已经星期三了吗 那么,来一波题解吧 本题地址http://www.luogu.org/problem/show?pid=1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们 ...
- noip 2014 提高组初赛
noip 2014 提高组初赛 一. TCP协议属于哪一层协议( ) A. 应用层 B. 传输层 C. 网络层 D. 数据链路层 B TCP(传输控制协议) 若有变量int a; float: x, ...
- [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】
/*====================================================================== [NOIp 1998 提高组]Probelm 2 连接 ...
- noip2010提高组题解
NOIP2010提高组题解 T1:机器翻译 题目大意:顺序输入n个数,有一个队列容量为m,遇到未出现元素入队,求入队次数. AC做法:直接开1000的队列模拟过程. T2:乌龟棋 题目大意:有长度为n ...
- 【NOIP2018】提高组题解
[NOIP2018]提高组题解 其实就是把写过的打个包而已 道路铺设 货币系统 赛道修建 旅行 咕咕咕 咕咕咕
- 最优贸易 NOIP 2009 提高组 第三题
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路 ...
随机推荐
- 如果导入的项目只有源码,可以将其他项目中的.classpath 和 .project复制到根目录下即可。
如果导入的项目只有源码,没有对应的项目配置如web项目,可以将其他项目中的.classpath 和 .project复制到根目录下即可.
- SharePoint 2016 每天预热脚本介绍
使用SharePoint的朋友们应该知道,SharePoint每天夜里有自动回收的机制,使环境每天把占用的内存都释放出来,以确保不会累计占用过多内存导致服务器崩溃. 我们可以打开IIS,选中我们的应用 ...
- [leetcode-551-Student Attendance Record I]
You are given a string representing an attendance record for a student. The record only contains the ...
- 【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 ...
- 【LeetCode】66. Plus One
题目: Given a non-negative number represented as an array of digits, plus one to the number. The digit ...
- powershell 统计AD中所有计算机及对应的操作系统信息
要想用powershell管理域,首先先加载activedirectory模块 PS C:\> import-module activedirectory 下面就可以利用get-adcomput ...
- Go学习笔记(一)Let's 干
加 Golang学习 QQ群共同学习进步成家立业 ^-^ 群号:96933959 简介 Go是Google开发的一种 静态强类型.编译型,并发型,并具有垃圾回收功能的编程语言.为了方便搜索和识 ...
- 访问Access日期字段
在使用sql访问Access日期字段,应在变量前后加#,例子: s:=Format(select xueshID,name,times,qukbz,skdate,banji from dianmjil ...
- mybatis代理类Demo
前言 简单实现通过代理接口来实现对数据的查询demo,也是对mybatis的一个熟练.首先是编写接口代理. public interface IBookMapper { List<BookMod ...
- 使用URLConnection调用axis1.4开发的webservice
写在前面: 调用webservice的方式有很多:1.直接在客户端使用工具生成客户端代码,将代码拷进项目中调用即可:2.使用对应的webservice框架来进行调用,比如如果我们我的服务端开发用的是a ...