SCU3037 Painting the Balls
2017-02-15 23:17
399 查看
Description
Petya puts the \(N\) white balls in a line and now he wants to paint some of them in black, so that at least two black balls could be found among any \(M\) successive balls.
Petya knows that he needs \(C_i\) milliliters of dye exactly to paint the \(i\)-th ball.
Your task is to find out for Petya the minimum amount of dye he will need to paint the balls.
Input
The first line contains two integer numbers \(N and M (2<=N<=10000, 2<=M<=100, M<=N)\).The second line contains \(N\) integer numbers \(C_1, C_2, ..., C_N (1 \le C_i \le10000)\).
Output
Output only one integer number - the minimum amount of dye Petya will need (in milliliters).
Sample Input
6 3
1 5 6 2 1 3
Sample Output
9
\(f[i][j]\)表示最后一个黑球在\(i\)倒数第二个黑球在\(i-j\)的最小值。
转移方程\[f[i][j] = \min(f[j][1 \sim m-j])+C_i\]
前缀优化,另\(g[i][j] = \min(f[i][1 \sim j])\)。复杂度\(O(NM)\)。
#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; const int maxn = 10010,maxm = 110,inf = 1<<30; int N,M,C[maxn],f[maxn][maxm],g[maxn][maxm],ans = inf; inline int gi() { char ch; int ret = 0,f = 1; do ch = getchar(); while (!(ch >= '0'&&ch <= '9')&&ch != '-'); if (ch == '-') f = -1,ch = getchar(); do ret = ret*10+ch-'0',ch = getchar(); while (ch >= '0'&&ch <= '9'); return ret*f; } int main() { freopen("3037.in","r",stdin); freopen("3037.out","w",stdout); N = gi(); M = gi(); for (int i = 1;i <= N;++i) C[i] = gi(); for (int i = 0;i <= N;++i) for (int j = 0;j <= M;++j) g[i][j] = f[i][j] = inf; for (int i = 1;i <= M;++i) for (int j = 1;j < i;++j) f[i][j] = C[i]+C[i-j],g[i][j] = min(g[i][j-1],f[i][j]); for (int i = M+1;i <= N;++i) for (int j = 1;j < M;++j) f[i][j] = g[i-j][M-j]+C[i],g[i][j] = min(g[i][j-1],f[i][j]); for (int i = 1;i <= M;++i) for (int j = 1;j < i;++j) ans = min(ans,f[N-M+i][j]); cout << ans << endl; fclose(stdin); fclose(stdout); return 0; }
相关文章推荐
- SGU 183 Painting the balls(DP)
- sgu183 Painting the balls_dp
- SGU183 Painting the balls(DP+优化)
- Painting the balls SGU - 183
- SGU 183 Painting the balls (DP优化)
- sgu183:Painting the balls(dp+优化)
- Painting the Web
- codeforces D. Painting The Wall
- Light OJ 1317 Throwing Balls into the Baskets 概率DP
- UVALive - 6893 The Big Painting 字符串哈希
- lightOJ 1317 Throwing Balls into the Baskets
- [Codeforces Round #195 DIV2E (CF336E)] Vasily the Bear and Painting Square
- lightoj 1317 Throwing Balls into the Baskets
- codeforces 398 B. Painting The Wall (概率与期望DP)
- CSUOJ 1162 Balls in the Boxes 快速幂
- LA 6893 The Big Painting(矩阵Hash)
- [Codeforces398B]Painting The Wall(期望dp)
- 20162017-ct-s03e02-codeforces-trainings-season-3-episode-2-en-I Painting the natural numbers
- 矩阵hash + KMP - UVA 12886 The Big Painting
- LightOJ1317-Throwing Balls into the Baskets