hdu 5009 dp 剪枝 技巧

2021-08-27 11:04:09 字數 874 閱讀 1062

題意: 現在你有乙個長度為n的空串,你要塗顏色,如果想要把l到r 塗上顏色,那麼花費就是l到r的不同顏色數的平方值。

思路: dp    dp[i] 表示到位置i 最小花費為多少, 那麼他可以從dp[j] (j對顏色離散化一下。

**:

#includeusing namespace std;

typedef long long ll;

const int n =5e4+5;

ll dp[n];

int a[n];

int tmp[n];

int n;

int col[n];

int nxt[n];

int pre[n];

int vis[n];

int main()

int xx=0;

for(int i=1;i<=n;i++)

}n=xx;

for(int i=1;i<=n;i++) a[i]=tmp[i];

sort(col+1,col+cc+1);

cc=unique(col+1,col+cc+1)-(col+1);

for(int i=1;i<=n;i++)

for(int i=0;i<=n;i++) dp[i]=i;

for(int i=1;i<=n;i++)

pre[0]=-1;

memset(vis,-1,sizeof(vis));

for(int i=1;i<=n;i++)

ll kk=0;

for(int j=pre[i];j!=-1;j=pre[j])

}printf("%lld\n",dp[n]);

}return 0;

}

hdu 5009 離散化 鍊錶 dp

這道題因為顏色給的資料範圍大於資料總數,所以要對顏色進行離散化後再進行操作 而這道題每次更新,可以用鍊錶記錄當前情況下每種顏色最靠近當前位置的所在位置後,因為最終花費是c c,所以每乙個所選區間的顏色數不能大於sqrt 區間長度 所以可以得到n sqrt n 複雜度演算法的動態規劃如下 dp i m...

DP解題 剪繩子

dp解題 剪繩子 問題 給定一根長度為 n的繩子,請把繩子剪成m段 m n都是整數,n 1 並且m 1 每段繩子的長度記為 k 0 k 1 k m 請問k 0 k 1 k m 可能的最大乘積是多少?示例 1 輸入 8 輸出 18 解釋 當繩子的長度是 8時,可以把它剪成長度分別為2 3 3的三段,此...

hdu 2087 剪花布條

include include includeusing namespace std const int maxn 1004 char str maxn str1 maxn int main printf d n count return 0 此題主要是strstr 函式的應用!據說也可以用kmp來...