a:bzoj 1264:[ahoi2006]
題意:給兩個序列s1,s2,由n種元素構成,滿足每個序列裡各元素出現5次,求最長公共子串行
思路:每個串中的元素都會重複五次,記錄a串中的位置,讀b串,因為已經知道兩個相等,然後比較a串前面最大的加1和這個位置的值,用樹狀陣列存一下區間最大值,樹狀陣列+最長公共子串行變體
#include#define maxn 100005
int n;
int f[maxn],pos[maxn/5][6];
int bit[maxn];
int max(int x,int y)
void init()
return ;
}int lowbit(int x)
int query(int x)
int updata(int x,int val)
int solve()
} return ans;
}int main()
b:hdu 6537
題意:給乙個由整數組成的序列,可以對區間[l,r]進行反轉(invert),利用反轉令區間的最長不降序子串行長度增大,求最後的序列長度和反轉的區間
思路:第乙個想的是先找公升序列,再找降序列,然後兩邊加一下,結果發現10^5
c:zoj3537
題意:給出一些點表示多邊形蛋糕的定點的位置(逆時針順序),切蛋糕時每次只能在頂點和頂點間切,每一次切蛋糕都有相應的代價( |xi + xj
| * |
yi+
yj| % p.
),給出代價的公式,問把蛋糕切成多個三角形的最小代價是多少。頂點數
<=300(最優三角剖分)
思路:判斷凸包+區間dp
#include#include#include#include#define ll long long
#define inf 2000000007
#define maxn 305
using namespace std;
struct note
;note poi[maxn],sta[maxn];
int ans[maxn][maxn];
int cost[maxn][maxn];
int n,top;
bool cmp(struct note a,struct note b)
}int geta(int i,int j)
void solve(int i)
max_q[tail_high++]=i;
while(tail_low>pre_low&&num[min_q[tail_low-1]]>x&&tail_low-1>=0)
min_q[tail_low++]=i;
if(i>=k)
tmp/=10;
}ans[i]+=ans[i-1];
}}int main()
}
u:
題意:求1~n之間有多少個數又含有13又能被13整除,(1<=n<=1e9)
思路:數字dp,具體程式注釋
#include#include#define maxn 20
int dp[maxn][maxn][10];
int maxx[maxn];
int geta(int len,int mod,int stu,bool lim)
if(!lim)//沒有超過的話,就將計數返還
dp[len][mod][stu]=cnt;
return cnt;
}int main()
printf("%d\n",geta(len,0,0,1));
}}
2021寒假集訓 WEEK1 1 25 1 31
標頭檔案 algorithm 用法 next permutation s,s n 時間複雜度o n 函式作用 求數列中第k小的數 標頭檔案 algorithm 用法 nth element start,start k 1,start n 第k小的數字就是 a k 1 第k大的數字 a 第k大就是第n...
2019SDUTACM寒假集訓感
寫在最前面 18級的第一批集訓選拔我是參加過的,然後進了504。然而,我在504呆的時間並不長,聽過幾節學長講的課,講的很好,能聽懂。考慮到會掛科的情況,以及集訓的勞苦打壓,我退出了集訓 一退就是後悔 退出集訓的我決定自己往下學。然而,能力不足乙個多星期才能磨下乙個專題 痛苦 磨完乙個難的專題,又來...
2019牛客寒假演算法基礎集訓營1C
給定乙個長度為n nn的序列,沒乙個值表示第i ii個星球的能量指數為p ip i pi 飛船當前耐力指數為第乙個星球的能量指數,當星球i ii能到達星球j jj當且僅當p i pj p i p j pi pj 假設當前飛船的耐久值為t tt,當飛船到達星球j jj時船的耐久值會變為t p jt o...