mirror of
https://gitcode.com/Zengtudor/alg2025.git
synced 2025-08-21 18:52:07 +00:00
添加多个算法实现文件,优化输入输出性能,并更新相关测试用例
This commit is contained in:
parent
3d8c15bd7f
commit
7a20684212
47
src/7/25/T639136.cpp
Normal file
47
src/7/25/T639136.cpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#include <algorithm>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <iostream>
|
||||||
|
#include <istream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using ll = int64_t;
|
||||||
|
|
||||||
|
#define il static inline
|
||||||
|
|
||||||
|
ll n,x,d,ans=0;
|
||||||
|
std::vector<ll> m,p;
|
||||||
|
std::vector<ll> c;
|
||||||
|
|
||||||
|
il void dfs(ll nn,ll nx,ll nans){
|
||||||
|
if(nn>n){
|
||||||
|
ans=std::max(ans,nans);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(nn==1)[[unlikely]]{
|
||||||
|
for(ll i=0;i*m[nn]<=nx;i++){
|
||||||
|
c[nn]=i;
|
||||||
|
dfs(nn+1,nx-i*m[nn],nans+i);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for(ll i=c[p[nn]];(i<=c[p[nn]]+d && i*m[nn]<=nx);i++){
|
||||||
|
c[nn]=i;
|
||||||
|
dfs(nn+1,nx-i*m[nn],nans+i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
std::iostream::sync_with_stdio(false);
|
||||||
|
std::cin.tie(nullptr);
|
||||||
|
std::cout.tie(nullptr);
|
||||||
|
std::cin>>n>>x>>d;
|
||||||
|
m.resize(n+1);
|
||||||
|
p.resize(n+1);
|
||||||
|
c.resize(n+1);
|
||||||
|
std::cin>>m[1];
|
||||||
|
for(ll i=2;i<=n;i++){
|
||||||
|
std::cin>>m[i]>>p[i];
|
||||||
|
}
|
||||||
|
dfs(1,x,0);
|
||||||
|
std::cout<<ans<<'\n';
|
||||||
|
}
|
29
src/7/25/T639160.cpp
Normal file
29
src/7/25/T639160.cpp
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#include <bits/stdc++.h>
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
ios::sync_with_stdio(false);
|
||||||
|
cin.tie(0);
|
||||||
|
int x,y,n;
|
||||||
|
cin>>x>>y>>n;
|
||||||
|
int lastA = -x;
|
||||||
|
int lastB = -y;
|
||||||
|
int res=0;
|
||||||
|
for(int i=1;i<=n;i++){
|
||||||
|
bool needA = (i - lastA > x -1);
|
||||||
|
bool needB = (i - lastB > y -1);
|
||||||
|
if(needA && needB){
|
||||||
|
lastA = i;
|
||||||
|
res++;
|
||||||
|
}
|
||||||
|
else if(needA){
|
||||||
|
lastA = i;
|
||||||
|
res++;
|
||||||
|
}
|
||||||
|
else if(needB){
|
||||||
|
lastB = i;
|
||||||
|
res++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout<<res<<'\n';
|
||||||
|
}
|
@ -1,3 +1,51 @@
|
|||||||
|
/*
|
||||||
|
2 10 7 11
|
||||||
|
2 10
|
||||||
|
6 1
|
||||||
|
|
||||||
|
n=2, W=10, B=7, X=11
|
||||||
|
c[1]=2,c[2]=10
|
||||||
|
cost[1]=6,cost[2]=1
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <iostream>
|
||||||
|
#include <istream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using ll = int64_t;
|
||||||
|
|
||||||
|
#define il static inline
|
||||||
|
ll n,w,b,x,ans=0;
|
||||||
|
std::vector<ll> c,cost;
|
||||||
|
|
||||||
|
il void dfs(ll nn,ll nw,ll nb,ll nc){
|
||||||
|
if(nn>n){
|
||||||
|
ans=std::max(ans,nc);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for(ll i=0;i<=c[nn];i++){
|
||||||
|
if(nw<cost[nn]*i)return;
|
||||||
|
dfs(nn+1, std::min(nw-cost[nn]*i+x,nb+b*i), nb+b*i, nc+i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main(){
|
int main(){
|
||||||
|
std::iostream::sync_with_stdio(false);
|
||||||
}
|
std::cin.tie(nullptr);
|
||||||
|
std::cout.tie(nullptr);
|
||||||
|
|
||||||
|
std::cin>>n>>w>>b>>x;
|
||||||
|
c.resize(n+1);
|
||||||
|
cost.resize(n+1);
|
||||||
|
for(ll i=1;i<=n;i++){
|
||||||
|
std::cin>>c[i];
|
||||||
|
}
|
||||||
|
for(ll i=1;i<=n;i++){
|
||||||
|
std::cin>>cost[i];
|
||||||
|
}
|
||||||
|
dfs(1, w, b, 0);
|
||||||
|
std::cout<<ans<<'\n';
|
||||||
|
}
|
112
src/7/25/T639173d.cpp
Normal file
112
src/7/25/T639173d.cpp
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
#include <algorithm>
|
||||||
|
#include <deque>
|
||||||
|
#include <iostream>
|
||||||
|
#include <istream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using ll = long long;
|
||||||
|
|
||||||
|
const int maxapple = 10000;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
iostream::sync_with_stdio(false);
|
||||||
|
cin.tie(nullptr);
|
||||||
|
cout.tie(nullptr);
|
||||||
|
ll n, W, B, X;
|
||||||
|
cin >> n >> W >> B >> X;
|
||||||
|
vector<ll> c(n);
|
||||||
|
vector<ll> cost(n);
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
cin >> c[i];
|
||||||
|
}
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
cin >> cost[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
vector<ll> dp(maxapple + 1, -1);
|
||||||
|
dp[0] = W;
|
||||||
|
int tot = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
int ntot = min(tot + (int)c[i], maxapple);
|
||||||
|
vector<ll> ndp(maxapple + 1, -1);
|
||||||
|
deque<int> q;
|
||||||
|
|
||||||
|
for (int j = 0; j <= ntot; j++) {
|
||||||
|
ll L = (ll)j - c[i];
|
||||||
|
while (!q.empty() && q.front() < L) {
|
||||||
|
q.pop_front();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (j <= tot && dp[j] != -1) {
|
||||||
|
ll ce = dp[j] + X;
|
||||||
|
ll me = W + B * (ll)j;
|
||||||
|
ll gval = min(ce, me) + (ll)j * cost[i];
|
||||||
|
while (!q.empty()) {
|
||||||
|
int idx = q.back();
|
||||||
|
ll cei = dp[idx] + X;
|
||||||
|
ll mei = W + B * (ll)idx;
|
||||||
|
ll gidx = min(cei, mei) + (ll)idx * cost[i];
|
||||||
|
if (gidx <= gval) {
|
||||||
|
q.pop_back();
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
q.push_back(j);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!q.empty()) {
|
||||||
|
int idx = q.front();
|
||||||
|
ll cei = dp[idx] + X;
|
||||||
|
ll mei = W + B * (ll)idx;
|
||||||
|
ll g = min(cei, mei) + (ll)idx * cost[i];
|
||||||
|
ndp[j] = g - (ll)j * cost[i];
|
||||||
|
if (ndp[j] < 0) {
|
||||||
|
ndp[j] = -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ndp[j] = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dp = ndp;
|
||||||
|
tot = ntot;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ans = 0;
|
||||||
|
for (int j = tot; j >= 0; j--) {
|
||||||
|
if (dp[j] >= 0) {
|
||||||
|
ans = j;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
cout << ans << endl;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
|
||||||
|
使用dp[j]表示摘取j个苹果后的剩余能量(状态需满足能量非负)。状态转移时,考虑在第i棵树上摘取k个苹果,需确保当前能量足够消耗,并更新剩余能量和能量上限。
|
||||||
|
|
||||||
|
单调队列优化:对于每棵树,使用单调队列高效计算状态转移。队列维护一个滑动窗口内的最大值,确保每次状态转移在常数时间内完成,从而将总复杂度优化至O(n
|
||||||
|
* tot_apples),其中tot_apples是苹果总数上限(10000)。
|
||||||
|
|
||||||
|
关键步骤:
|
||||||
|
|
||||||
|
初始化dp[0] = W(起始能量)。
|
||||||
|
|
||||||
|
遍历每棵树,更新状态:
|
||||||
|
|
||||||
|
计算新状态ndp[j],表示在当前树摘完苹果后的剩余能量。
|
||||||
|
|
||||||
|
使用单调队列维护窗口[j - c_i, j]内的最大值,快速计算ndp[j]。
|
||||||
|
|
||||||
|
更新dp为ndp,并累计苹果总数。
|
||||||
|
|
||||||
|
最终遍历dp数组,找到最大j使得dp[j] >= 0。
|
||||||
|
|
||||||
|
*/
|
3
src/7/25/apple.in
Normal file
3
src/7/25/apple.in
Normal file
File diff suppressed because one or more lines are too long
1
src/7/25/apple.out
Normal file
1
src/7/25/apple.out
Normal file
@ -0,0 +1 @@
|
|||||||
|
2638
|
1
src/7/25/pills40.in
Normal file
1
src/7/25/pills40.in
Normal file
@ -0,0 +1 @@
|
|||||||
|
4052 6785 831888
|
1
src/7/25/pills40.out
Normal file
1
src/7/25/pills40.out
Normal file
@ -0,0 +1 @@
|
|||||||
|
327
|
1
src/7/25/pills41.in
Normal file
1
src/7/25/pills41.in
Normal file
@ -0,0 +1 @@
|
|||||||
|
9 2 91067
|
1
src/7/25/pills41.out
Normal file
1
src/7/25/pills41.out
Normal file
@ -0,0 +1 @@
|
|||||||
|
56916
|
51
src/7/25/wupin27.in
Normal file
51
src/7/25/wupin27.in
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
50 1000000000 122070
|
||||||
|
52753
|
||||||
|
70137 1
|
||||||
|
46540 1
|
||||||
|
94083 3
|
||||||
|
7964 1
|
||||||
|
76656 5
|
||||||
|
1302 4
|
||||||
|
4384 1
|
||||||
|
51599 7
|
||||||
|
90597 6
|
||||||
|
92846 8
|
||||||
|
16975 4
|
||||||
|
93612 10
|
||||||
|
66589 9
|
||||||
|
55116 8
|
||||||
|
7868 6
|
||||||
|
18781 7
|
||||||
|
81315 4
|
||||||
|
22170 5
|
||||||
|
84443 4
|
||||||
|
43630 18
|
||||||
|
47725 1
|
||||||
|
42568 20
|
||||||
|
12638 21
|
||||||
|
61342 18
|
||||||
|
63155 9
|
||||||
|
19194 26
|
||||||
|
51343 23
|
||||||
|
79334 5
|
||||||
|
60793 24
|
||||||
|
78736 18
|
||||||
|
45787 21
|
||||||
|
98565 24
|
||||||
|
83835 2
|
||||||
|
35093 31
|
||||||
|
34591 21
|
||||||
|
77312 33
|
||||||
|
26529 27
|
||||||
|
83116 12
|
||||||
|
78667 7
|
||||||
|
8736 20
|
||||||
|
24156 20
|
||||||
|
34451 3
|
||||||
|
4203 15
|
||||||
|
30166 17
|
||||||
|
39756 6
|
||||||
|
45261 14
|
||||||
|
90161 15
|
||||||
|
92457 17
|
||||||
|
71692 18
|
1
src/7/25/wupin27.out
Normal file
1
src/7/25/wupin27.out
Normal file
@ -0,0 +1 @@
|
|||||||
|
183958
|
Loading…
Reference in New Issue
Block a user