noip 真題班刷題記錄及總結思考

2022-04-08 05:17:11 字數 3287 閱讀 1153

2019牛客暑期noip真題班提高組7-圖論

2019牛客暑期noip真題班普及組3-列舉1

2019牛客暑期noip真題班提高組6-樹

2019牛客暑期noip真題班提高組5-dfs

2019牛客暑期noip真題班普及組2-模擬2

2019牛客暑期noip真題班提高組4-貪心

2019牛客暑期noip真題班提高組3-數學

2019牛客暑期noip真題班普及組1-模擬1

2019牛客暑期noip真題班提高組2-二分

2019牛客暑期noip真題班提高組1-模擬

2019牛客暑期noip真題班普及組10-dp2

2019牛客暑期noip真題班普及組9-dp1

2019牛客暑期noip真題班普及組8-貪心

2019牛客暑期noip真題班普及組7-數學

2019牛客暑期noip真題班普及組6-排序

2019牛客暑期noip真題班普及組5-字串處理

2019牛客暑期noip真題班提高組10-dp3

2019牛客暑期noip真題班提高組9-dp2

2019牛客暑期noip真題班普及組4-列舉2

2019牛客暑期noip真題班提高組8-dp1

聽課目標:

prework:

狀態轉移:

首先考慮f[l][r][i]如何計算,關鍵是尋找「集合劃分的依據」,劃分依據一般選取「最後一步的操作」,所以這裡我們可以按最後一部分的位置來將f[l][r][i]所表示的所有方案劃分成若干類:

最後一段是sum[l+i-1...r]的所有劃分方案;

最後一段是sum[l+i...r]的所有劃分方案;

最後一段是sum[r...r]的所有劃分方案;

如果最後一段是sum[k...r],

那麼這一類的最大值是f[l][k-1][i-1]*sum[k~r],其中sum()計算某一段數的和模10的餘數。

最終列舉所有長度是n的區間,取最大值/最小值即可。

//2019/09/28

const int n=110,m=10;

int f[n][n][m],g[n][n][m];

int a[n],sum[n];

int n,m;

inline int get_sum(int l,int r)

int main()

rep(i,1,2*n)sum[i]=sum[i-1]+a[i];

rep(i,1,m)

rep(len,i,n)

rep(l,1,n)}}

int maxx=int_min,minn=int_max;

rep(i,1,n)

printf("%d\n%d\n",minn,maxx);

return 0;

}

01揹包裸題;

首先比較跑步和放技能哪個更快:

所以放技能稍快一些。

因此當我們有充足的放技能時間時,一定要放技能,所以只有最後一小段沒時間放技能的時候,才會用跑步的方式。

求解:用f[i]表示用i的時間,最多可以跑多遠。

先求出只用閃爍技能時,每秒最多可以跑多遠。

再用跑步的方式來「插縫」,遞推出結合兩種方式時,每秒最多可以跑多遠。

//2019/09/28

const int n=300010;

int b,s,t;

int f[n];

int main()

else

} rep(i,1,t)

if(f[t]>=s)

} }else

return 0;

}

#includeusing namespace std;

inline void work(string s,int score)

} printf("%d:%d\n",a,b);

}int main()

#includeusing namespace std;

char ss[1<<21],*p1=ss,*p2=ss;

inline char gc()

template inline void rd(t &x)while(isdigit(c))x=f?-x:x;}

#define rep(i,a,b) for(int i=(a);i<=(b);++i)

#define dwn(i,a,b) for(int i=(a);i>=(b);--i)

#define mem(a,b) memset(a,b,sizeof(a))

#define ee(i,u) for(int i=head[u];i;i=e[i].next)

int wei,ans;

int main()

return 0;

}

演算法:dp,環形dp

複雜度o(n* m)

sol:

不妨設小蠻在0號,所有人的編號是0∼n−1。

狀態表示f[i, j]

狀態計算:

f[i,j]等於兩個子集的元素數之和。

注意當i==0j==n-1時需要特殊處理邊界(因為是環狀的)。

最終答案就是f[0][m]

const int n=35;

int f[n][n];//第j次傳球後球在第i號同學手裡的方案數

int n,m;

int main()

演算法知識點:dp,多重揹包問題,揹包問題求方案數

複雜度:o(\(n^a\))

問題轉化:

這是典型的多重揹包求方案數問題:

const int n=110,mod=1000007;

int f[n],a[n];

int n,m;

int main()

printf("%d\n",f[m]);

return 0;

}

LeetCode 刷題記錄(1 5題)

1 兩數之和 題目鏈結 class solution 一次雜湊法 deftwosum self,nums,target type nums list int type target int rtype list int m for i in range len nums minus target n...

bugku新題 Misc刷題記錄

解壓兩個加密壓縮包 對key.zip偽加密解得falg檔案,用winhex檢視 一看很像摩斯密碼 培根一般是五個一組所以不是培根 轉摩斯a b 得到 解得密碼 zipcrypto 檢視密碼.jpg 因為題目提示會用到base 所以找base 密碼。找了半天在檔案尾部發現一串可以的字元 正好有base...

pat 刷題記錄 pat 乙級 刷題 1002

讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10 100 在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。123456789098765432...