151102的测试总结
2015-11-02 16:38
218 查看
第一题
【题目及题号】ball superoj990【题解】
本题就是要求一串连续的数的乘积,并且比较大小。
如果写高精度是明显会超时的。
因为题目保证两个人的差值至少超过较小的那个的1%,所以我们可以把乘法问题转换成加法。
对每个数x求一个log(x),然后加起来比较大小。
【注意】
对于log(0)要记录一个答案最终为0的标记。
对于负数要统计个数,然后log(0-x)计算。
大数据可以转log算,然后就不用写高精了开心。
第二题
【题目及题号】array superoj991【题解】
20%~40%
f[i][j]表示上面那行删到数i,下面那行删到数j的最小代价,然后可以n^4转移。
100%
考虑性质,sum[i]-klen实际就相当于把每个数-1,来抵消掉它的长度。
代价就变成了sum(ai~aj)*sum(bl~bg)
现在发现一个很有趣的性质,(a+c)*(b+d) > ab+cd;
这就相当于说我们可以一个一个元素考虑。
如果考虑将上面的元素并入前面删掉的集合,那么就由f[i+1][j]转移而来;
如果考虑将下面的元素并入前面删掉的集合,那么就由f[i][j+1]转移而来;
如果考虑重新分成一份,就由f[i+1][j+1]转移而来。
f[i][j] = min(f[i+1][j],f[i][j+1],f[i+1][j+1])+a[i]*b[j];
【注意】
本题数据可能会爆Int 然而long long[5000][5000]是肯定会炸内存的。
所以使用滚动数组。(注意一下,滚动数组有时候不需要赋初值,然而本题必须赋初值)
另外 我自己写的时候没有注意好边界wa了一发。
滚动数组部分代码见下
memset(f,63,sizeof(f)); f[0][m+1] = 0; for(int i=n;i>=1;i--){ now^=1,last^=1; for(int j=0;j<=m+1;j++)f[now][j] = INF; for(int j=m;j>=1;j--){ f[now][j] = min(f[last][j],min(f[now][j+1],f[last][j+1]))+a[i]*b[j]; } } cout<<f[now][1]<<endl;
第三题
【题目及题号】date superoj992【题解】
本题求路径中有割边的点对数量。
正向去做是可以做的,就是情况太多,很麻烦。
所以我考虑逆向来做,就相当于求不止一条路径的点对数量x,allnum-x即可。
再往下想一步,什么样的点对直接会不存在割边?自然他们在同一个环中。
问题自然转化成了求一个环。
最后可以使用tarjan,因为是无向图,我保证使用过的边不再被反向使用一遍即可。
size从2开始计数,然后当前边^1即为反向边的编号,特判即可。
【注意】
allnum=n∗(n−1)2;allnum = {n*(n-1)\over2};
x=∑itotnum[i]∗(num[i]−1)2x = \sum^{tot}_i {{num[i]*(num[i]-1)}\over2}
tot为双连通分量的数量。相关文章推荐
- SQL Server 2008 R2——查找最小nIndex,nIndex存在而nIndex+1不存在 求最小连续数组中的最大值
- Android 源码分析01_AsyncTask
- ios 定位经纬度中国国内修正
- 第九周 项目二(1)-压缩形式存储对称矩阵基本运算
- 第九周 对称矩阵压缩存储的实现与应用
- 第十周 项目一-二叉树算法库
- eclipse打不开闪退解决方式
- 摄像机矩阵详解
- duilib问题解决:滚动条不见了
- Symfony2 生成应用包
- .net对于Xml的常规操作
- 第八周实践项目~建立顺序串的算法库
- 第10周项目2——二叉树遍历的递归算法
- js浮动层的控制
- Linux内核模块编写详解
- 黑马程序员———OC语言 NSDictionary和 NSMutableDictionary的介绍
- 51nod 1070 Bash游戏 V4 (博弈论_找规律)
- HUD 1026 纯C代码广搜
- DuiDesigner修改:增加对RichEdit控件属性的保存
- weblogic的集群与配置