主页
最近更新
我的思路(望通过)
最后更新于 2025-05-01 22:19:52
作者
__CrossBow_EXE__
分类
题解
题解
AT_abc184_f
复制 Markdown
更新文章内容
## 思路(先看思路,再看题解,已成习惯) ~~(日本题真滴简单)~~\ 这道题虽然没有标签,但我认为这就是一道**快速排序+贪心** #### 快速排序: 先给各位讲一下快速排序的函数(简称快排): ```cpp sort(数组名,数组名+元素个数,cmp) ``` 这里说明一下,参数中的 $cmp$ 是用来应对各种排序情况的,可以不填。(例如此题) #### 贪心: 贪心(或称贪婪),是指选择眼下看来最好的选择。注意,贪心算法求出的结果并不一定是最优解。 ## 代码成长过程(一点点完善代码) 首先,写出基础框架: ```cpp #include<bits/stdc++.h>//sort函数需使用万能头 using namespace std; int n,a[45];//这里n≤40,所以数组不用定义太大 int main(){ return 0; } ``` 接着,进行基本的输入: ```cpp #include<bits/stdc++.h> using namespace std; int n,a[45]; int main(){ int t; cin>>n>>t; for(int i=1;i<=n;i++){ cin>>a[i]; } return 0; } ``` 增加 $sort$ : ```cpp #include<bits/stdc++.h> using namespace std; int n,a[45]; int main(){ int t; cin>>n>>t; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); return 0; } ``` 最后,增加贪心算法: ```cpp #include<bits/stdc++.h> using namespace std; int n,a[45]; int main(){ int t,num=0;//这两个变量是为了贪心算法 cin>>n>>t; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); //贪心算法开始 for(int i=n+1,j=1;i>=1,j<=n;i-=2,j+=2){ if((num+a[i])<=t) num+=a[i]; if((num+a[j])<=t) num+=a[j]; } cout<<num; return 0; } ``` ## 完整代码 ```cpp #include<bits/stdc++.h>//sort函数需使用万能头 using namespace std; int n,a[45];//这里n≤40,所以数组不用定义太大 int main(){ int t,num=0;//这两个变量是为了贪心算法 cin>>n>>t; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); //贪心算法开始 for(int i=n+1,j=1;i>=1,j<=n;i-=2,j+=2){ if((num+a[i])<=t) num+=a[i]; if((num+a[j])<=t) num+=a[j]; } cout<<num; return 0; } ```
Loading...
点赞
0
收藏
0