摘要: /*题目: 星星有等级,每颗星星的等级划分为在它下方(坐标轴上)有多少颗星星即为多少等级分析: 由于先输入的是x坐标,而y坐标已经是按照由小到大输入的,所以可以用树状数组来求和的形式 来求出该行星的等级。*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define X 40005int c[X],ans[X],n;int lowbit(int x){ return x & -x;}void modify(int x){ while(x<X) 阅读全文
posted @ 2012-04-30 22:18 yejinru 阅读(223) 评论(0) 推荐(0) 编辑
摘要: /*字符串DP,但是要找到用最小的字符串来匹配,所以用dp储存当前所使用过的字符串数。打印路径的话直接用数组表示前缀*/#include <iostream>#include <string>#include <cstring>#include <cstdio>using namespace std;string s = "22233344115566070778889990";#define X 50010int dp[X],pre[X],len[X],p[X],L;string a[X],in[X],b;void chan 阅读全文
posted @ 2012-04-30 16:01 yejinru 阅读(205) 评论(0) 推荐(0) 编辑
摘要: /*题目: 把石头分成两堆,问最小的重量差值为多少。分析: 先求和,然后用和的一半转为01背包。转移方程为: dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]]+w[i]); 缩小维度后为dp[j] = max(dp[j],dp[j-w[i]]+w[i]);*/#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int X = 2000010;int dp[X],w[25],n;int main(){ freopen(& 阅读全文
posted @ 2012-04-30 15:53 yejinru 阅读(221) 评论(0) 推荐(0) 编辑
摘要: /*题目: 寻找图中的最小环,输出路径。分析: 可以通过枚举删除其中的一条边,看看能否从该边的一点走到另一点,若能并且该最短路的长度加上 删除的边的长度小于当前的最优解的话,更新路径与最优解。而打印路径可以通过数组来表示该点的 前一顶点,然后递归打印路径即可。最短路可以通过dijkstra算法求出。估计的时间复杂度为O(n^2*E)。 我交了一下,用时:1.328 内存:264 KB*/#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int X = 阅读全文
posted @ 2012-04-30 10:03 yejinru 阅读(312) 评论(0) 推荐(0) 编辑