hdu--4455+ Substrings+2012杭州區域賽C題+DP
好久沒寫部落格了,看了下上一篇部落格還是八月份的最後一天寫的,然後就因為阿里擁抱變化,忙著找工作去了;9月份找到工作,10月份又胡思亂想了一個月,但其實都是沒必要的,應該明白鬍思亂想解決不了任何問題的,實在得不到的又何必強求,順其自然吧。加油吧,少年!!!
題目連結:點選進入
下午訓練的時候這道題想了好幾個小時還是完全沒有思路,但是靜下心來還是可以看到一些規律的。首先w=i+1的情況和w=i時的情況是有關係的,具體的我們設dp[i]表示w=i時的答案,那麼考慮到w=i-1時,如果在每一段的後面加上一個數,就可以得到w=i的情況;但是要注意的是w=i-1時的最後一段是不能通過加上一個數得到w=i的情況的,所以這種情況要去掉,這種情況的數目是很容易計算出來的,因為只需要固定起點為最後一個元素,然後依次向前推看當前區間有多少個不同的元素;然後難點在於如何計算在w=i-1情況下,對每一段加上一個數後增加的情況數;對於這一點我們可以提前預處理出每個數和其最近的相同數的距離來計算(如果沒有相同的數,就是和原點的距離),我們統計出各種不同距離的情況數後,就可以利用遞推的方法計算出w=i-1時通過在每一段加一個數後增加的情況數了。更具體的見程式碼:
程式碼如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000010;
long long dp[maxn];
int sum[maxn],pre[maxn],dist[maxn];
int last[maxn],a[maxn];
int main()
{
//freopen("in.txt","r",stdin);
int n;
while(scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
memset(pre,0,sizeof(pre));
last[1]=1;
pre[a[n]]=1;
int cnt=2;
for(int i=n-1;i>=1;i--)
{
if(pre[a[i]])
last[cnt]=last[cnt-1];
else
{
last[cnt]=last[cnt-1]+1;
pre[a[i]]=1;
}
cnt++;
}
memset(pre,0,sizeof(pre));
memset(dist,0,sizeof(dist));
for(int i=1;i<=n;i++)
{
dist[i-pre[a[i]]]++;
pre[a[i]]=i;
}
sum[n]=dist[n];
for(int i=n-1;i>=1;i--)
{
sum[i]=sum[i+1]+dist[i];
}
dp[1]=n;
for(int i=2;i<=n;i++)
dp[i]=dp[i-1]-last[i-1]+sum[i];
int m;
scanf("%d",&m);
while(m--)
{
int x;
scanf("%d",&x);
printf("%lld\n",dp[x]);
}
}
return 0;
}
相關文章
- 2018 ICPC南京區域賽題解 更新至 8 題
- 2020 ICPC 線上模擬賽 E題 Eat Walnuts(區間dp)
- AtCoder Regular Contest 104——C區間dp
- 區間dp 合併石子問題
- 【DP】區間DP入門
- 影片區域性打馬賽克
- Just for fun——C/C++函式返回區域性變數的問題C++函式變數
- 區間dp
- 動態規劃 區間dp 基礎題動態規劃
- ACM-ICPC 2018 南京賽區網路預賽__E AC Challenge【狀態壓縮+DP】ACM
- [補題] 第 45 屆國際大學生程式設計競賽(ICPC)亞洲區域賽(上海)程式設計
- 區間問題(非DP型別)及變形型別
- 2024ICPC杭州賽後總結
- 迴文串問題(動態規劃DP C++)動態規劃C++
- Eat Walnuts(區間dp)
- ACM-ICPC 2018 南京賽區網路預賽__K The Great Nim Game【博弈論+費馬小定理+DP】ACMGAM
- C240817D. 模擬賽:樹上dp(以i為起點)+set操作
- WebGL實現簡易的區域性“馬賽克”Web
- DP 習題(一)
- c語言中的變數儲存區域C語言變數
- C語言--靜態區域性變數C語言變數
- 【區間dp】石子合併
- 洛谷P8208 [THUPC2022 初賽] 骰子旅行 題解 期望DP
- ICPC2023 杭州 題解
- 杭州ZoomVideo iOS面試題OOMIDEiOS面試題
- c語言中作用域和儲存期的區別C語言
- 【c】全域性變數與區域性變數變數
- dp專題訓練
- 數位dp - 板子題
- HDU 6787 Chess 2020百度之星 初賽三 T5 題解 dp
- 第十五屆藍橋杯軟體賽省賽C/C++B 組題解C++
- (C++)DP動態規劃C++動態規劃
- OSPF單區域和多區域
- [動態規劃] 區間 dp動態規劃
- POJ1390 Blocks (區間DP)BloC
- 2022年美賽C題翻譯+思路分享
- 2017第八屆天梯賽省賽C++C組【第一題:貪吃蛇長度】C++
- Python閉包區域性變數問題Python變數