全部评论
怎么做啊
送花
回复
分享
凉了,唉
送花
回复
分享
秋招专场
官网直投
是接馅饼那个题吗
送花
回复
分享
这题应该咋做啊
送花
回复
分享
0%😅
送花
回复
分享
这个通过不通过有结果了?
送花
回复
分享
我的状态变成等待面试了,不知道是过了还是养鱼
送花
回复
分享
笔试题是全是编程题吗
送花
回复
分享
#include<iostream> #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>>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 2 1 while(l<n>> dp(n); for(int i=0;i<n>=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></n></int></n></int></vector></algorithm></iostream>
送花
回复
分享
相关推荐
投递网易有道等公司10个岗位 > 我的实习求职记录
点赞 评论 收藏
转发