題意: 現在你有乙個長度為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來...