摘要: 这一题是比较简单的动态规划,状态f[i]表示走前i个棋子时的最高分数,状态转移方程为f[i] = {max(f[j]), i > j && step[i] > step[j] + step[i]}.AC code: 1 ude <iostream> 2 #define MAX 1000 3 using namespace std; 4 5 int step[MAX]; 6 int f[MAX]; 7 int n; 8 int max_sum(int i) 9 {10 int max = 0;11 int j;12 for(j = 0; j < i; 阅读全文
posted @ 2012-03-01 21:50 背着超人飞 阅读(254) 评论(0) 推荐(0)
摘要: 题目大意是找到一个最多的老鼠序列,使得序列中的老鼠的体重满足递增,相应老鼠的速度满足递减。思路就是先按体重递增进行sort排序,然后按照体重找到最长递减子序列即可,用动态规划做比较简单。状态f[i]表示前i个老鼠中的最长递减子序列长度,状态转移方程为f[i] = max{f[j], mice[j].speed > mice[i].speed} + 1, 最后找出最大的f[i]即可。注意此题还需要输出找到的序列中的老鼠的最原始的标号,因此不仅要在刚开始的时候把每个老鼠的最初的序号记下来,还要在进行状态转移的时候把当前的老鼠的位置标记下来。AC code: 1 #include <io 阅读全文
posted @ 2012-03-01 21:10 背着超人飞 阅读(340) 评论(0) 推荐(0)