Trabajo de Niuke Zhou Zhou Lian Qi Rabbit (1) (optimización de dp 3D)

enlace de enlace l i n k

Ideas:

Establecemos dp tridimensional: dp [i] [j] [k] dp [i] [j] [k]d p [ i ] [ j ] [ k ]到 第iiHe trabajadojjhasta ahoraj día, incluidojjTrabajé continuamente en j díaskkLa fuerza física mínima consumida en k días.

Entonces, ¿cómo transferir?
Cuando el iiCuando debes descansar el i día, es decir,s [i] = = 0 s [i] == 0s [ i ]==0

  • dp [i] [j] [0] = = dp [i - 1] [j] [k] dp [i] [j] [0] == dp [i-1] [j] [k] d p [ i ] [ j ] [ 0 ]==d p [ i-1 ] [ j ] [ k ](其中1 <= k <= j 1 <= k <= j1<=k<=j);

Este iiCuando hay descanso o no hay descanso durante i días, es decir,s [i] = = 1 s [i] == 1s [ i ]==1

  • 休息 :dp [i] [j] [0] = dp [i - 1] [j] [k] dp [i] [j] [0] = dp [i-1] [j] [k]d p [ i ] [ j ] [ 0 ]=d p [ i-1 ] [ j ] [ k ](其中1 <= k <= j 1 <= k <= j1<=k<=j);
  • 不 休息 :dp [i] [j] [k] = min (dp [i] [j] [k], dp [i - 1] [j - 1] [k - 1] + k) dp [i] [j] [k] = mínimo (dp [i] [j] [k], dp [i-1] [j-1] [k-1] + k)d p [ i ] [ j ] [ k ]=m i n ( d p [ i ] [ j ] [ k ] ,d p [ i-1 ] [ j-1 ] [ k-1 ]+k ) ;

Debido a la limitación de espacio de esta pregunta, tenemos que comprimir el espacio. Usando la idea de espacio comprimido de 01 mochila, podemos quitar la primera dimensión y dejar jjj se puede recorrer en orden inverso, y la complejidad eso (n ∗ n ∗ n) o (n * n * n)o ( nnorten )

#include<bits/stdc++.h>
using namespace std;

const int maxn = 500,inf = 1e9+20;
int dp[maxn][maxn];
int main()
{
    
    
	int n,k;
	cin >> n >> k;
	string s;
	cin >> s;
	for(int i=0;i<=n+1;i++)
	for(int j=0;j<=n+1;j++)dp[i][j] = inf;
	dp[0][0] = 0;
	for(int i=1;i<=n;i++)
	{
    
    
		for(int j = i; j > 0; j--)
		{
    
    
			for(int k = 1; k <= j; k++)
			{
    
    
				if(s[i-1] == '0')dp[j][0] = min(dp[j][k],dp[j][0]);
				else
				{
    
    
					dp[j][0] = min(dp[j][0],dp[j][k]);
					dp[j][k] = min(dp[j][k] , dp[j-1][k-1] + k);
				}
			}
		}
	}
	for(int i=n;i>0;i--)
	for(int j=1;j<=n;j++)
	if(dp[i][j] <= k)
	{
    
    
		cout<<i<<'\n';
		return 0;
	}
	puts("0");
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44499508/article/details/106231079
Recomendado
Clasificación