留只脚印(DP)

时间:2023-03-09 09:47:57
留只脚印(DP)

题目链接:http://codeforces.com/problemset/problem/698/A

很久很久没做咯~~~~

  dp 是个很神奇的东西。。。。

  

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; const int max_day = + ;
const int max_option = ; int dp[max_day][max_option];
// 0:rest 1:contest/rest
// 2:sport/rest 3:sport/contest/rest int main()
{
int n, a;
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif // ONLINE_JUDGE
while (scanf("%d", &n) != EOF) {
memset(dp, , sizeof(dp)); for (int i = ; i <= n; i++) {
scanf("%d", &a); // 呢个野要时时刻刻更新,选择最优来更新,甘样就保证到 dp[i][1]和dp[i][2]都系最好噶啦
dp[i][] = max(dp[i-][], max(dp[i-][], dp[i-][]));
if (a == || a == ) {
dp[i][] = max(dp[i-][], dp[i-][]) + ; // +1 写出边,重要的事情说3遍!!!
} if (a == || a == ) {
dp[i][] = max(dp[i-][], dp[i-][]) + ;
}
// printf("dp[%d][0]=%d, dp[%d][1]=%d, dp[%d][2]=%d\n", i, dp[i][0], i,dp[i][1], i,dp[i][2]);
} printf("%d\n", n-max(dp[n][], max(dp[n][], dp[n][]))); /* 写错晒了。。。。脑退化 = =,好彩总算知道,dp[i][3] 系无鬼用的,后来知道左,改翻岩呢个细节,靠~ = =
for (int i = 1; i <= n; i++) {
// dp[i][3] = max(dp[i-1][2], dp[i-1][1]) + 1;
if (a[i] == 1) { // contest
dp[i][0] = dp[i][1] = dp[i-1][2]+1;
dp[i][2] = dp[i-1][2];
}
else if (a[i] == 2) { // sport
dp[i][0] = dp[i][2] = dp[i-1][1]+1;
dp[i][1] = dp[i-1][1];
// printf("dp[%d][2] = %d\n", i, dp[i][2]);
}
else if (a[i] == 0) { // rest
dp[i][0] = dp[i-1][0];
dp[i][1] = dp[i-1][1];
dp[i][2] = dp[i-1][2];
// printf("dp[%d][0] = %d\n", i, dp[i][0]);
}
else { // a[i] = 3 // s/r/c
if (a[i-1] == 2) {
dp[i][1] = dp[i-1][1] + 1;
dp[i][2] = dp[i-1][2];
dp[i][0] = dp[i-1][0];
}
else if (a[i-1] == 1) {
dp[i][2] = dp[i-1][2] + 1;
dp[i][0] = dp[i-1][0];
dp[i][1] = dp[i-1][1];
} /*
if (a[i-1] == 0) {
dp[i][3] = dp[i-1][0];
}
else if (a[i-1] == 1) {
dp[i][3] = dp[i-1][2]+1;
}
else if (a[i-1] == 2) {
dp[i][3] = dp[i-1][1]+1;
}
else {
dp[i][3] = max(dp[i-1][2], dp[i-1][1]) + 1;
} // }
printf("dp[%d][0] = %d\n", i, dp[i][0]);
printf("dp[%d][1] = %d\n", i, dp[i][1]);
printf("dp[%d][2] = %d\n", i, dp[i][2]);
}
printf("\ndp[%d][0]=%d, dp[%d][1]=%d, dp[%d][2]=%d\n", n, dp[n][0], n,dp[n][1], n,dp[n][2]);
*/
}
return ; }