摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1428题意:有三辆车负责投递杂志,有N个位置L1,L2……LN,给出车从Li移动到Lj所用的时间D[i][j],求出投递完所有的位置所用的最少时间。开始时三辆车都在L1,投递时只能有一辆车移动,另外两个呆在原地。并且投递完位置Li-1才能投递Li。思路:DP递推公式:D[i][j][k][m]=min(D[i-1][x][k][m],D[i-1][j][x][m],D[i-1][j][k][x])+time[x][i];(1≤x<i)I代表到位置i所用的最少时间 阅读全文
posted @ 2012-08-04 10:44 冰鸮 阅读(281) 评论(0) 推荐(0)
摘要: WA!!! 1 //Wrong Answer 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cctype> 6 7 const int MAXN = 260; 8 9 char str[MAXN]; 10 bool vis[MAXN]; 11 int stack[MAXN]; 12 int kuohao[MAXN]; 13 int len; 14 15 void kuo_hao_pei_dui() 16 { 17 int top = 0; 18 阅读全文
posted @ 2012-08-03 21:10 冰鸮 阅读(171) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3471题目:有N个原子,两两相撞会释放出能量,并且第 i 个原子跟第 j 个原子相撞后原子j会消失,给出一个矩阵,P[i][j]代表第 i 个原子跟第 j 个原子相撞释放的能量值,求这些原子相撞所能释放的最大能量值。分析:状态压缩,最多2^10种状态。集合S表示所有原子集合,i 与 j 相撞, 状态转移方程为:dp[ S ^ (1 << j) ] = max( dp[ S ^ (1 << j) ], dp[S]+ map[i][j]);撞 阅读全文
posted @ 2012-08-03 20:40 冰鸮 阅读(133) 评论(0) 推荐(0)
摘要: 目前WA中,正在找错…… 1 #include <cstdio> 2 3 const int MAXN = 1000 + 10; 4 const int INF = 2147483645; 5 6 double stack[MAXN]; 7 double height[MAXN]; 8 double reverse[MAXN]; 9 int n;10 11 int Bsearch( int x, int y, double v )12 {13 int m;14 while ( x < y )15 {16 m = ( x + y ) / 2;17 ... 阅读全文
posted @ 2012-07-30 19:56 冰鸮 阅读(161) 评论(0) 推荐(0)
摘要: 题目链接:http://poj.org/problem?id=3267题目:给出一个字典和一个字符串,问这个字符串中最少删去几个字符,能使它变成由字典中的单词组成的序列。分析:从字符串的第一个字符开始,在字典中依次寻找与其匹配的单词:dp[i] = min( dp[i], dp[ i - 1] + 1 ); 如果找不到匹配单词dp[i] = min( dp[i], dp[ i - ( len[j] + cnt ) ] + cnt ); 如果第 j 个单词与其匹配dp[i] 代表到字符串第 i 个字母时需要删去多少个字符,len[j]是字典中第 j 个单词的长度,cnt... 阅读全文
posted @ 2012-07-30 19:50 冰鸮 阅读(137) 评论(0) 推荐(0)
摘要: 最大值最小化问题,二分+贪心,参考刘汝佳白皮书151页。之前我的代码在UVa上交过了,但是在ZOJ上却是WA。后来才发现是错在这两组数据:24 3100000 1 1 14 31 1 1 100000 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 1000 + 10; 5 6 int m,k; 7 long long int num[MAXN]; 8 long long int sum; 9 bool w[MAXN]; 10 11 bool Judge( long long int x ) 1 阅读全文
posted @ 2012-07-29 13:44 冰鸮 阅读(189) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1102正着做9种情况:ininputinputoninputoneoutoutputoutputonoutputoneone反着做貌似更简单一些,情况更少一点。我是正着做的。 1 #include <cstdio> 2 3 const int MAXN = 10000000 + 5; 4 5 char str[MAXN]; 6 7 bool Judge() 8 { 9 if ( !(str[0] == 'o' || str[0] == 'p' 阅读全文
posted @ 2012-07-28 20:14 冰鸮 阅读(333) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1859题目:给出一个矩阵,求出指定子矩阵中的最小元素。我用的不是正规解法,纯属水过去的……这个是留着自己看的,大家就不要学了。 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 300 + 10; 5 6 int map[MAXN][MAXN]; 7 int Mat[MAXN][MAXN]; 8 9 int n;10 int INF = 2147483645;11 12 阅读全文
posted @ 2012-07-28 19:54 冰鸮 阅读(285) 评论(0) 推荐(0)
摘要: 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=986最长上升子序列…… 1 #include <cstdio> 2 #include <cstring> 3 4 const int MAXN = 40000 + 10; 5 6 int n; 7 int num[MAXN]; 8 int stack[MAXN]; 9 10 int Bsearch( int x, int y, int v )11 {12 int m;13 while ( x < y )14 {15 m =... 阅读全文
posted @ 2012-07-28 19:50 冰鸮 阅读(166) 评论(0) 推荐(0)
摘要: 题目链接:http://poj.org/problem?id=3233题目:给出一个 n×n 的矩阵 A 和一个整数k, 求S=A+A2+A3+ … +Ak.其中n(n≤ 30),k(k≤ 109) ,m(m< 104).分析:两次二分,A^i可以用矩阵快速幂,然后求和二分。比如,当k=6时,有:A + A^2 + A^3 + A^4 + A^5 + A^6 =(A + A^2 + A^3) + A^3*(A + A^2 + A^3)--------------------------------------我用的递归求和,程序很杯具的跑了2s……等有空再改改吧,写的真的很糟糕 阅读全文
posted @ 2012-07-28 11:46 冰鸮 阅读(145) 评论(0) 推荐(0)