1. 程式人生 > >BZOJ5196&&洛谷P4267 [USACO18FEB]Taming the Herd

BZOJ5196&&洛谷P4267 [USACO18FEB]Taming the Herd

n^4大力DP

我們定義f[i][j]表示前i天跑了j次 然後我們列舉第j次是在哪天跑的,然後大力轉移就好了

程式碼

//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=150;
int n,a[M],f[M][M];
inline int read()
{
	int x=0;char ch=getchar();
	while (
ch>'9'||ch<'0') ch=getchar(); while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x; } inline void write(int x) { if (x>9) write(x/10);; putchar(x%10+'0'); return ; } signed main() { n=read(); for (int i=1;i<=n;i++) a[i]=read(); memset(f,0x3f,sizeof(f)); f[0][0]=0; for
(int i=1;i<=n;i++) for (int k=1;k<=i;k++) for (int j=i;j>=1;j--) { int cnt=0,tot=0; for (int e=j;e<=i;e++) { if (cnt!=a[e]) tot++; cnt++; } f[i][k]=min(f[i][k],f[j-1][k-1]+tot); } for (int i=1;i<=n;i++) write(f[n][i]),puts(""); return 0; }