877C
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了877C相关的知识,希望对你有一定的参考价值。
构造
想了好长时间。。。
答案是n+n/2
我们这么想,先把偶数位置炸一遍,所有坦克都在奇数位置,然后再把奇数炸一遍,坦克都到偶数去了,然后再炸一次偶数就都炸掉了。。。
好巧妙啊 奇偶讨论很重要
#include<cstdio> #include<cmath> using namespace std; const int N = 1005; int n, m; double dp[N][N], a[N][N][3]; double dfs(int x, int y) { if(x == n && y == m) return 0.0; if(x > n || y > m) return 0.0; if(fabs(1.0 - a[x][y][0]) < 1e-8) return 0.0; if(dp[x][y] >= 0.0) return dp[x][y]; dp[x][y] = dfs(x, y + 1) * a[x][y][1] + dfs(x + 1, y) * a[x][y][2] + 2.0; dp[x][y] /= 1.0 - a[x][y][0]; return dp[x][y]; } int main() { while(scanf("%d%d", &n, &m) != EOF) { for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) { dp[i][j] = -1.0; for(int k = 0; k < 3; ++k) scanf("%lf", &a[i][j][k]); } printf("%.3f\n", dfs(1, 1)); } return 0; }
以上是关于877C的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 877C Slava and tanks(思维)