关注
/**
http://bestmind.space/posts/%E9%93%BE%E5%AE%B62018%E9%93%BE%E4%B9%A0%E7%94%9F%E6%8B%9B%E8%81%98%E8%80%83%E8%AF%95-%E7%BC%96%E7%A8%8B%E9%A2%98%E4%B8%89/
链家笔试第一题,食品那题
分析:使用动态规划
1.定义dp(i,j),表示除了编号从i到j的食物,剩下卖出的最大值。
2.状态转移方程为:
dp(i,j) = Max{dp(i-1,j)+cost(i-1), dp(i,j+1)+cost(j+1)}
dp(i-1,j)+cost(i-1):除了(i-1,j)卖出的最大值加上卖出第(i-1)的价值。
dp(i,j+1)+cost(j+1):除了(i,j+1)卖出的最大值加上卖出第(j+1)的价值。
3.空间复杂度O(n*n)可以优化为O(n)。
*/
int n, v[2002], dp[2002], maxIncome;
int main()
{
memset(dp, 0, sizeof dp);
maxIncome = 0;
cin >> n;
// 数组下标从1开始
v[0] = v[n+1] = 0;
for(int i = 1; i <= n; i++)
cin >> v[i];
// 从右往左dp
for(int i = 1; i <= n; i++) {
int day = i - 1;
// 求出dp[i, n~i]
for(int j = n; j >= i; j--) {
dp[j] = max(dp[j] + v[i-1]*day, dp[j+1] + v[j+1]*day);
day++;
}
// 上面计算得到的dp[i],表示的是除了第i个食物所得到的最大值,
// 因此还需选上第i个食物, 即最后一个选的是i
maxIncome = max(maxIncome, dp[i] + v[i]*n);
}
cout << maxIncome;
return 0;
}
查看原帖
点赞 评论
相关推荐
02-23 22:58
南京师范大学泰州学院 golang 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 三月的小目标 #
19034次浏览 372人参与
# 27届求职交流 #
7578次浏览 183人参与
# 神州信息求职进展汇总 #
4110次浏览 73人参与
# 交出你的校招焚诀 #
14372次浏览 241人参与
# 工作后明白的那些道理 #
56204次浏览 875人参与
# 面试___岗的必刷题单 #
15763次浏览 289人参与
# 26届求职交流 #
5091次浏览 108人参与
# AI“智障”时刻 #
28574次浏览 133人参与
# 学历or实习经历,哪个更重要 #
239196次浏览 1242人参与
# 求职遇到的搞笑事件 #
164692次浏览 895人参与
# 机械制造秋招总结 #
106030次浏览 889人参与
# 牛客AI文生图 #
20646次浏览 232人参与
# 实习生至暗时刻 #
22030次浏览 428人参与
# 哪些公司开暑期实习了? #
24643次浏览 207人参与
# 实习想申请秋招offer,能不能argue薪资 #
225757次浏览 1207人参与
# 米哈游求职进展汇总 #
588606次浏览 3028人参与
# 公司情报交流地 #
145259次浏览 1282人参与
# 找AI工作应该卷什么? #
6313次浏览 102人参与
# 你觉得第一学历对求职有影响吗? #
234892次浏览 1282人参与
# 字节开奖 #
131621次浏览 608人参与
# 美团开奖 #
395531次浏览 1793人参与