09 2012 档案
摘要:题意:从地图左上角走到地图右下角所需的最短时间及路径。Analyse:用BFS,但是每个点所需的时间不同,因此BFS要改动。把地图上到达每个点的时间先初始化为INF,判断要不要从所在点走向下一点,若下一点的时间比这一点到下一点的时间长,则更新到达下一点的时间,下一点不管之前有没有遍历过都要放进队列里。如果把右下角作为起点,左上角作为终点,记录的路径就容易回溯得到了。View Code 1 #include<cstdio> 2 #include<queue> 3 using namespace std; 4 typedef struct 5 { 6 int x; 7 ..
阅读全文
摘要:题意:在一个方格图里只能向右和向下走,且每次走的步数只能是方格内的数,求从左上角到右下角最多的路线数。Analyse:用二维数组a[][]存储图,用dp[i][j]存储走到a[i][j]最多的路线数,dp[i][j]=sigma{dp[x][y](若a[x][y]能走到a[i][j])}。但要实现每个dp[i][j]的计算都不重不漏,需要一个适当的计算顺序。由于只能向右和向下走,所以计算dp[i][j]实际只需先有a[i][j]上面全列的最多路线和左面全排的最多路线,所以可以从dp[0][0]一层一层向外计算,每一层先算上面和左面。View Code 1 #include<iostrea
阅读全文
摘要:题意:有各种作业,分别给出用时,最后期限,每超一天就扣一分。问做完所有作业的最少扣分及其策略。Analyse:自己看的时候是一头雾水,看别人的题解上写的是状态压缩的DP。状态压缩:用0和1表示某一作业的状态,1代表已完成,0代表未动手,一个int足以表示所有的不同状态,例如5中的5表示为二进制就是101,代表第一个作业和第三个作业已经完成,第二个作业未完成,dp[5]就表示假设只有三个作业,只完成第一和第三个作业扣的最少分数。View Code 1 #include<string> 2 #include<iostream> 3 #include<vector>
阅读全文

浙公网安备 33010602011771号