2024.6.20网易互娱游戏开发笔试题目
一共三道题目,第一题模拟,代码省略,第二题,动态规划,第三题二维差分
第二题,背包问题
#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
int main(){
int n;
cin>>n;
int sa,sb,sc;
cin>>sa>>sb>>sc;
vector<int> a(n),b(n),c(n),val(n);
for(int i=0;i<n;i++)
{
cin>>a[i]>>b[i]>>c[i]>>val[i];
}
int dp[51][51][51];
memset(dp,0,sizeof(dp));
int ans=0;
for(int i=0;i<n;i++) {
for (int j = sa; j >= 0; j--) {
for (int k = sb; k >= 0; k--) {
for (int l = sc; l >= 0; l--) {
if (j >= a[i] && k >= b[i] && l >= c[i]) {
dp[j][k][l] = max(dp[j][k][l], dp[j - a[i]][k - b[i]][l - c[i]] + val[i]);
ans = max(ans, dp[j][k][l]);
}
}
}
}
}
cout<<ans<<endl;
}
第三题 二维差分
#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
int main() {
int n;
cin>>n;
int dp[2005][2005];
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++){
int xi,yi,zi;
cin>>xi>>yi>>zi;
int dx1=xi-zi+1001;
int dx2=xi+zi+1001;
int dy1=yi-zi+1001;
int dy2=yi+zi+1001;
dp[dx1][dy1]++;
dp[dx1][dy2+1]--;
dp[dx2+1][dy1]--;
dp[dx2+1][dy2+1]++;
}
for(int i=1;i<=2004;i++)
{
for(int j=1;j<=2004;j++)
{
dp[i][j]=dp[i][j]+dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1];
}
}
int q;
cin>>q;
for(int i=0;i<q;i++)
{
int sum;
int x0,y0;
cin>>x0>>y0;
sum=dp[x0+1001][y0+1001];
cout<<sum<<endl;
}
return 0;
}