题解 | #牛牛的旅游纪念品#

牛牛的旅游纪念品

https://ac.nowcoder.com/acm/problem/207751

牛牛的旅游纪念品 (nowcoder.com)

问题描述:一行有n个物品,要选m个,同时两个选的物品之间的间隔要大于等于k。求选m个的最大价值。

思路:线性dp。状态表示为:在第j个选了i个的最大价值。

转移方程:

状态表示:F(i,j)表示在选了第j个物品后选了i个物品的最大价值。

如果i = 1,对于位置j来说有两个状态,要么选j的物品,要么不选就是前面的最大的物品。如果i > 1 && j > k,对于j也有两个状态,要么选,要么不选,跟i = 1的方式类似。

i = 1i != 1的处理是类似的,但是由于边界的存在,让i = 1的处理变得特殊了。(

边界:

目标:

代码:

const int N = 1e4 + 21;
int f[121][N];
int a[N];
void solve() {
    int n,m,k; cin>>n>>m>>k;
    // 边界处理
    memset(f, -0x3f, sizeof(f));
    rep(i,1,n) {
        cin>>a[i];
    }
    rep(i,1,m) {
        rep(j,1,n) {
            // 如果i = 1,选了一个,要么是前面的,要么是当前位置物品
            if(i == 1) f[i][j] = max(f[i][j-1], a[j]);
            // 如果 j > k,要么不选 - f[i][j-1],要么选 - f[i-1][j-k] + a[j]
            else if(j > k) f[i][j] = max(f[i][j-1], f[i-1][j-k] + a[j]);
        }
    }
    // 目标
    cout<<f[m][n];
}
全部评论

相关推荐

机智的豹子有点心碎:UU我还在找工作还没找到,一直在搜简历怎么改,总结了这些: 1.SEO:简历根据每一个岗位定制化:使用这个岗位中所描述的工作的词,它要求什么技能就把自己的技能描述成什么样子,把SEO用在自己身上(把我的简历和个人特质,当成一个热门产品来做 “搜索引擎优化”),让HR能用最低的门槛看到我 2."顺序:把岗位要求的技能跟经历放在简历的最开头、最显眼的位置" 3.包装:简历是一个最终交付说明书,只要最终学习成长做得到就可以,在合适的范围内自我吹捧(我这个人怎么能够在HR的角度被迅速的看懂和看到,减轻HR的工作压力) 4.每点加小标题​:用6~10字概括该段内容,便于面试官快速抓取信息。 5.避免空泛描述​:拒绝“培养了组织能力”等泛泛而谈,替换为具体行动和成果。 6."使用“三段式结构”​​:每段经历按“为什么做-做了什么-结果如何”展开: ​a) 为什么做​:痛点或目标(例如“品牌声量不足”) ​b) 做​了什么:方法论(例如“趋势洞察+竞品对标+人群细分”) ​c) 结果如何​:量化成果或影响(例如“推动客户投放20万预算”)" 7.量化成果​:用数字体现工作成效(如“整理500+份资料”“撰写2万字报告”)。 这些有的是我想去的岗的,如果对你有用的话按需修改就好~加油,早日上岸!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务