摘要: 注:http://poj.org/problem?id=3278为此题的缩水版 BFS能过思路:Step1:将数转换为二进制Step2:因为有-1的操作 所以不能直接贪心 通过观察可得 b是a的二进制前缀与b是二进制的前缀+1同样重要 考虑 dp[位数][状态] (状态为前缀 和前缀+1)Step3:建立初值 dp[i][j]=abs(a-toBase10(b的前i+1位))Step4: if(b的二进制表示第i位==0) dp[i][0]=min(dp[i-1][0]+1,dp[i-1][1]+2)dp[i][1]=min(dp[i-1][0]+2,dp[i-1][1]+2)elsedp[i 阅读全文
posted @ 2012-08-05 21:20 编程菜菜 阅读(795) 评论(0) 推荐(0) 编辑
摘要: 思路:先BFS出关键点(起点,电池,开关)之间的最短路然后状态压缩DP dp[当前位置][状态]=电池电量二分答案即可#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <queue>using namespace std;const int N=16;#define for if(0); else forstruct Point{ int x,y; Point(){x=y=0;} Point(int xx,int y 阅读全文
posted @ 2012-08-05 17:15 编程菜菜 阅读(667) 评论(0) 推荐(0) 编辑