浙江十套 第一套 解題報告

2022-04-29 06:48:08 字數 3913 閱讀 4983

如果\(maxo == 0\) 說明只有\(x\), 答案就是\(maxx\)

如果\(x\)不夠用,說明每次都是放\(maxo\)個\(o\),用乙個\(x\)隔開 \(oooooxooooox \cdots\)

此時有\(counto \ge (countx + 1) * maxo\)

因此,最大是 \(countx + (countx + 1) * maxo\)

注意更新

#include #include long long counto, countx, maxo, maxx;

int main()

return 0;

}

有倍數關係的加入同一集合

乙個線性篩 + 並查集 (有倍數關係)

#include #include using namespace std;

const int maxn = 100001;

bool pflag[maxn];

int prime[maxn>>1];

int fa[maxn];

int a, b;

int prime_cnt = 0;

int ans;

int p;

inline void prime_filter() }}

inline int getroot(int x)

bool judgeequal(int x,int y)

inline void join(int x,int y)

inline void init()

prime_filter();

}inline void solve()

} }for (int i =a; i <= b; ++ i)

if (fa[i] == i) ans ++;

}int main()

動態規劃經典題目,考的時候沒有想出來優化,a得很水。。。。

用\(dp[i][j]\)表示在\([i,j]\)區間所有該被釋放的人都被釋放的最小支付代價。

若是釋放\(k\),那麼代價為\(dp[i][k-1]+dp[k+1][j]+(j-i)\)

這裡的\(sum[i]\)指的是前i個位置中有多少犯人無法被釋放。

#include #include #include const int max = 1010;

const int inf = 0x7fffffff;

int n, m, a[max], sum[max], dp[max][max];

inline void init()

scanf("%d%d", &n, &m);

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

scanf("%d", &a[i]);

std::sort(a + 1, a + m + 1);

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

sum[i] = a[i] - a[i - 1] - 1;

sum[m + 1] = n - a[m];

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

sum[i] = sum[i] + sum[i-1];

}inline void solve()

int main()

難度:省選/省選+

最大匹配: 在乙個無向圖中,定義一條邊覆蓋的點為這條邊的兩個端點。找到乙個邊集s包含最多的邊,使得這個邊集覆蓋到的所有頂點中的每個頂點只被一條邊覆蓋。s的大小叫做圖的最大匹配。

我們發現,一顆樹的最大匹配取決於它的子樹的匹配情況,因此很容易想到以子樹為階段,當前節點是否已經匹配為狀態進行dp

首先考慮求最大匹配是多少

記\(f[i][0/1]\)表示以\(i\)為根的子樹,當前節點是/否已經匹配的最大匹配數,用\(g[i][0/1]\)表示方案數

記\(a_i\)為\(i\)節點兒子的集合

顯然對於 \((j \in a_i)\)我們有如下轉移

\[f[i][0] = \sum max\,

\]\[g[i][0] = \prod_g[j][0] \times \prod_ g[j][1] \times \prod_ (g[j][0] + g[j][1])

\]如果當前節點要選的話,那就是乙個兒子必須要連,剩下的取最大值

\[f[i][1] = max\+1

\]\(g[i][1]\) 的轉移,類似於\(g[i][0]\)的求法,分三種情況乘在一起就可以了

高精度dp一下吧(此題**超級毒瘤)

我先放乙個簡單的

#include#include#include#define max 1000

#define hmax (max*4)

#define dmax (max/10)

#define base 1000

struct number ;

char names[hmax][11];

int next_sibling[hmax];

int first_subord[hmax];

int withn[hmax];

int woutn[hmax];

int active[hmax];

int root;

struct number with[hmax];

struct number wout[hmax];

void bug(void)

void zero(struct number *result)

void unit(struct number *result)

void add(struct number *result, struct number *what)

result->values[k]+=what->values[k];

}if (!k) return;

for (; (result->values[k-1]>=base)&&(kdigits); k++)

if (result->values[k-1]>=base)

}void mul(struct number *result, struct number *what)

printf("%d",what->values[what->digits-1]);

for (i=what->digits-2; i>=0; i--) printf("%03d",what->values[i]);

}int hash(char *name)

return r;

}int create(char *name)

active[i]=1;

strcpy(names[i],name);

next_sibling[i]=-1;

first_subord[i]=-1;

return i;

}int find(char *name)

if (!active[i]) return -1;

return i;

}void read_in(void)

} // endfor i

}void compute(int which)

if (first_subord[which]==-1)

for (k=first_subord[which]; k!=-1; k=next_sibling[k])

if (withn[k]==woutn[k]) break;

if (k==-1) // endfor k

add(&with[which],&wout[which]);

} else // endfor k

} // endif k==-1

}int main(void)

2020初中生暑假 第一套

t1掃雷 二維陣列,方向陣列 includeusing namespace std char c 105 105 int a 105 105 n,m int dx dy intmain for int i 1 i n i return0 t2 music 列舉每一段旋律,即單詞,對應列舉歌曲的每乙個...

2023年6月第一套深度閱讀

mental 精神 sustained 持續 anxiety 焦慮 strive 努力 baseline 基線 reveal 顯示 obvious 明顯的 observe 觀察 link 聯絡 actually 事實上 flagship 旗艦 marvels 奇蹟 cursed 詛咒 fate 命運...

第一套二級錯誤點總結

1 演算法中,二分查詢法 堆排序法 2 在資料庫的 模式中,外模式 又稱為使用者模式和子模式 外模式可以有多個,而內模式和概念模式只能有乙個。3 學生選課成績表的關係模式是sc s c g 其中 s為學號,c 為課號,g為成績,檢索課號為2的成績不及格的學生的學號 4 用c語言編寫的程式為源程式,它...