文章列表
 
您正在查看 "Vijos" 分类下的文章

2009年04月12日 星期日 上午 2:54
刚开始没有一点思路,看了别人的题解才知道用最长上升子序列。对同学i的左边求最长上升子序列,右边求最长下降子序列,设f1[i]表示1~i的最长上升子序列,f2[i]表示i~n的最长下降子序列,那么符合合唱队列的总人数就是 count = f1[i] + f2[i] - 1 (因为 i 被计算了两次)。
#include<cstdio>
#include<vector>
 
2009年03月15日 星期日 上午 1:35
以前就做过,但对算法不了解。
其实是一道动态规划,用递归也可以。
状态转移方程:map[i][j]=min(map[i][j-1],map[i-1][j],map[i-1][j-1])+1;
min()里面的是map[i][j]旁边的三个,三个值分别表示以每一个点为右下角的正方形的最大边长。找到其中最小的,是为了保证加上这个点本身之后,还是一个好的正方形。当然,如果这个点本身就有瑕疵,那么它就不需要计算了。最后,找的map中最大的数,那就是最大正方形的边长了。注意,动态规划的时候,i和j要从1开始,而最后计算最大值是,i,j要从0开始,否则会漏掉一些答案。比如
 
2009年03月07日 星期六 上午 1:30
#include<cstdio>
using namespace std;
int main()
{
int apples[
 
2009年03月07日 星期六 上午 1:21
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
 
2009年02月08日 星期日 下午 2:39
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;

int main
 
2009年02月08日 星期日 下午 2:39
用vector和algorithm里的sort

#include<vector>
#include<algorithm>
#include<iostream>

using namespace std;

i
 
2009年02月08日 星期日 下午 2:36
刚开始想复杂了,能算出k任意大的情况,没想到k只有15,就直接模拟。
#include<cstdio>

using namespace std;

int main()
{
lon
 
2009年02月08日 星期日 下午 2:34
背包
#include<cstdio>
using namespace std;

int main()
{
int t,n
 
2009年02月08日 星期日 下午 2:32
4针Hanoi塔,用了一个很巧妙的办法:
n个金片的移动次数是下数列前 n项和
1                            2^0
2 2                        2^1
4 4 4               
 
2009年02月08日 星期日 下午 2:27
usaco原题
#include<iostream>
#include<map>
#include<vector>
#include<string>
#include
 
   
 
 
文章分类
 
 
 
 
 
 
 
 
 
Cet(1)
 
Usaco(124)
 
 
Vijos(12)
 
 
 
Noip(44)
 
Pku(127)
 
Ural(4)
 
Uva(3)
 
Hdu(12)
 
 
Tju(1)
 
Zoj(1)
 
   
 
文章存档
 
     
 
最新文章评论
  

好厉害
 

此文已拜读欢迎寒舍小聚!!
 

送你一轮月亮, 让你洁白无暇 ;
 

怎么能这么做…… 你真秒杀了吗……怀疑第二问错掉……
 

[表情]
   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu