提前批wxg爆笑一面
开场四十分钟算法题
1.n栋房子排成一排,用红黄蓝三种颜色的油漆涂,相邻两栋颜色不能一样,每座房子用每种油漆涂的成本可以表示为一个数组,[[5,8,7][6,9,3]]表示第一栋房子用三种油漆的成本分别为5,8,7。返回粉刷全部房子的最低成本
2.最大子序和
3.hardman
反问
下机
面试官人挺好的,准备好了再来吧,笑嘻了
1.n栋房子排成一排,用红黄蓝三种颜色的油漆涂,相邻两栋颜色不能一样,每座房子用每种油漆涂的成本可以表示为一个数组,[[5,8,7][6,9,3]]表示第一栋房子用三种油漆的成本分别为5,8,7。返回粉刷全部房子的最低成本
2.最大子序和
3.hardman
反问
下机
面试官人挺好的,准备好了再来吧,笑嘻了
全部评论
第一题应该是n*3的dp吧
然后状态转移是dp[i][0]=cost[i][0]+min(dp[i-1][1], dp[i-1][2])这个样子?
第一题lc有差不多的题吧 状态机dp
#include<bits/stdc++.h>
(35927)#define int long long
using namespace std;
int dp[1010][3];
int arr[1010][3];
int find_min(int a,int b)
{
int min_n=INT_MAX;
for(int i=0;i<3;i++)
{
if(i==b)
continue;
else
{
min_n=min(min_n,dp[a-1][i]);
}
}
return min_n;
}
signed main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int red;
int blue;
int yellow;
cin>>red>>blue>>yellow;
arr[i][0]=red;
arr[i][1]=blue;
arr[i][2]=yellow;
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<3;j++)
{
dp[i][j]=find_min(i,j)+arr[i][j];
}
}
int min_n=INT_MAX;
for(int i=0;i<3;i++)
{
min_n=min(dp[n][i],min_n);
}
cout<<min_n;
}能做吗
确实有点搞笑
忍耐王
这个第三题hardman是什么?
这是暑期还是提前批啊
我都没有反问,直接跟我说拜拜
哈基GK
第一题贪心吧,两个便宜的油漆交替涂,如果是奇数就让最便宜的在第一个,没有比这个更便宜的方案了;第二题双指针维护中间的区间即可;第三题没见过,可以讲讲是什么吗
忍耐王

相关推荐

点赞 评论 收藏
分享

点赞 评论 收藏
分享
09-09 14:24
华东理工大学 Java 点赞 评论 收藏
分享