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==0
或j==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...