摘要:
题目链接:http://poj.org/problem?id=1037理解了牛人的代码才明白的,花了一晚上的功夫,orz....跪dp.思路:dp[len[i][0]表示长度为len的以i开始的前两个下降的序列的个数,dp[len][i][1]表示长度为len的以i开始的前两个上升的序列的个数;则有dp[len][i][0]+=dp[len-1][j][1](j<i);dp[len][i][1]+=dp[len-1][j][0](j>i);预处理之后,把序列求出来就可以了(这是难点);做法:由于不知道开始是上升还是下降,这一开始枚举,确定第1位的数,以及升降情况,然后我们就可以根据 阅读全文
摘要:
题目链接:http://www.codeforces.com/problemset/problem/4/B思路:一开始我看数据也不大,然后就dfs暴搜了一下,orz.....,TLE,然后看了别人的贪心策略,佩服得五体投地啊!!!可以先把Min,Max求出来,然后从第一个MAX[i]开始减,边界条件为MAX[i]>MIN[i]&&r>sum;View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 i 阅读全文
摘要:
题目链接:http://www.codeforces.com/problemset/problem/3/D思路:贪心+调整,?就改成')',如果加了')'后发现右括号比左括号多,就将花费小的括号变成'(',(采用优先队列,默认排序是从大到小);View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<cstring> 5 using namespace std; 6 typedef long long 阅读全文