关注
楼主我又来啦,今晚又看了看这道题,用动态规划做了,感觉应该没啥问题,不知道能不能ac
#include<iostream>
(5488)#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n;
cin>>n;
int k;
cin>>k;
vector<int> pos(n);
for(int i=0;i<n;i++){
cin>>pos[i];
}
//先对pos排序
sort(pos.begin(),pos.end());
int l=0,r=0;
vector<int> cover(n);
//双指针法,求出cover[0..n-1]
//cover[i]表示在pos中下标i之后(包括i)共有多少个馅饼与pos[i]的距离在k之内
//比如pos: 1 1 2 3 4 5 5
//如果k=1,则对应的cover: 3 2 2 2 3
while(l<n){
while(r<n&;&;pos[r]-pos[l]<=k){
++r;
}
cover[l]=(r-l);
++l;
}
/*
dp[i][j]表示: 必须恰好有j次选择了吃馅饼,
从pos中下标i开始选择吃或者不吃馅饼,
一直选到pos中的最后一个位置所能吃到的最多馅饼数量
*/
vector<vector<int>> dp(n);
for(int i=0;i<n;i++) {
dp[i].resize(3);
}
//必须选择吃2次馅饼,但此时只有最后一个馅饼,不符合题意,赋予-1方便后续比较
dp[n-1][2]=-1;
//必须选择吃1次馅饼,但此时只有最后一个馅饼,必须也只能选择吃它
dp[n-1][1]=1;
for(int i=n-2;i>=0;i--) {
for(int j=1;j<3;j++){
/*如果i+cover[i]==n并且必须恰好要有2次选择吃馅饼,
说明此时这个馅饼一定不能选择吃
否则的话,假如我们选择吃它,就会剩下一次必须选择吃馅饼的机会
但却没有馅饼可吃了,所以直接dp[i][j]=dp[i+1][j]*/
if(i+cover[i]==n&;&;j==2){
dp[i][j]=dp[i+1][j];
}
/*如果i+cover[i]==n并且必须恰好要有1次选择吃馅饼,
说明pos[i]这个馅饼一定要选择吃,因为这样会吃完pos[i]以及之后
的所有馅饼,一定是最多数量,直接dp[i][j]=cover[i]即可
*/
else if(i+cover[i]==n&;&;j==1){
dp[i][j]=cover[i];
}
/*如果i+cover[i]<n并且必须恰好要有1次选择吃馅饼(说明之前已经选择了一次,所以还剩下1次),
说明此时这个馅饼(pos[i])可以选择吃,也可以选择不吃,看哪个能吃饭的数量更多就选择哪个方案
*/
else if(i+cover[i]<n&;&;j==1){
dp[i][j]=max(cover[i],dp[i+1][j]);
}
/*如果i+cover[i]<n并且必须恰好要有2次选择吃馅饼(说明之前还没有一次选择吃馅饼,所以还剩下2次),
说明此时这个馅饼(pos[i])可以选择吃,也可以选择不吃,看哪个能吃饭的数量更多就选择哪个方案
*/
else if(i+cover[i]<n&;&;j==2){
dp[i][j]=max(dp[i+cover[i]][j-1]+cover[i],dp[i+1][j]);
}
}
}
// 从pos[0]开始决策,必须恰好只有2次选择吃馅饼的情况下所能吃到的最多数量即为答案
cout<<dp[0][2]<<endl;
return 0;
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 工作半年后更确定:我们依然不欠优绩主义什么6434
- 2... 杂记近期所面试的三家中小厂5926
- 3... 岁末论道:谁才是牛客 2025 最强修仙者?4783
- 4... #牛客2025仙途报告#居然是五颗星3641
- 5... 仙途报告3009
- 6... 【2025-年终总结】25届毕业生果果牛这一年~2971
- 7... 互联网实习求职的黑话和timeline,你所需要知道的……2963
- 8... 圣诞节用 AI 做个牛客运营翻翻乐!(含代码)2924
- 9... 我只是一个脆弱的人1989
- 10... 一个程序员的自救书|从酒吧陪玩DM到上岸大厂1941
正在热议
更多
# 牛客2025仙途报告 #
6794次浏览 168人参与
# 礼物开箱Plog #
2166次浏览 95人参与
# 2025年终总结 #
181916次浏览 3086人参与
# 哪些行业值得去? #
14493次浏览 77人参与
# 职场新人体验 #
157104次浏览 1128人参与
# 工作两年,想和老板谈涨薪怎么说 #
38903次浏览 175人参与
# 你面试体验感最差/最好的公司 #
24377次浏览 413人参与
# 考公VS就业,你怎么选? #
88287次浏览 497人参与
# 今年你最想重开的一场面试是? #
7190次浏览 95人参与
# 秋招落幕,你是He or Be #
17602次浏览 318人参与
# 一人说一个提前实习的好处 #
16122次浏览 252人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
13794次浏览 130人参与
# 找工作,行业重要还是岗位重要? #
86072次浏览 1709人参与
# 重来一次,你会对开始求职的自己说 #
7543次浏览 205人参与
# 各大公司公布25年Q3财报,你怎么看? #
5088次浏览 50人参与
# 实习没事做是福还是祸? #
19951次浏览 312人参与
# 大家每天通勤多久? #
70808次浏览 472人参与
# 实习的内耗时刻 #
212129次浏览 1567人参与
# 工作中听到最受打击的一句话 #
9660次浏览 158人参与
# 机械制造秋招总结 #
97456次浏览 878人参与
查看5道真题和解析