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 @@
|
||||
int main(){
|
||||
/*
|
||||
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(){
|
||||
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