题意:有树1 树2 会掉苹果,奶牛去捡,只能移动w次,开始的时候在树1 问最多可以捡多少个苹果?

思路: dp[i][j]表示i分钟移动j次捡到苹果的最大值

实例分析

0,1  1,2...说明 偶数在树1 奇数在树2

for (int i = 1; i <= n; i++)
{
scanf("%d", &t[i]);
t[i] -= 1;
}
for (int i = 1; i <= n; i++)
for (int j = 0; j <= w; j++)
{
if (j % 2) dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]) + t[i];
else dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]) + !t[i];
}

这里有个小技巧,不是每次要求输入1 2 2 之类的数据,我们把它们都-1 然后就可以就比较好看了

解释一下两句dp语句

dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1]) 表示上一次要么在树1 要么在树2的情况,但是我只需要它们两者之间的最大值

解决问题的代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int dp[][];
int t[];
int main()
{
int n, w;
scanf("%d%d", &n, &w);
for (int i = ; i <= n; i++)
{
scanf("%d", &t[i]);
t[i] -= ;
}
for (int i = ; i <= n; i++)
for (int j = ; j <= w; j++)
{
if (j % ) dp[i][j] = max(dp[i - ][j], dp[i - ][j - ]) + t[i];
else dp[i][j] = max(dp[i - ][j], dp[i - ][j - ]) + !t[i];
}
printf("%d\n", dp[n][w]);
}

最新文章

  1. Digital calculation
  2. Core Data数据操作
  3. 【maven】解决Missing artifact jdk.tools:jdk.tools:jar:1.6
  4. 逆天的IE7中,诡异的横向滚动条
  5. 一道sql面试题(查询语句)
  6. Docker进阶使用1
  7. SpringMVC框架(一)
  8. flask基础---第三篇
  9. java体系架构
  10. Flask从入门到精通
  11. laravel CSRF 保护
  12. 关于MySQL慢日志,你想知道的都在这
  13. web高并发的解决方案
  14. springboot系列十、springboot整合redis、多redis数据源配置
  15. Python Tutor
  16. (暴力+优化)学渣的逆袭 -- zzuli -- 1785
  17. wxml
  18. C语言 &#183; 彩票
  19. Bootstrap框架和inconfont、font-awesome使用
  20. PL/SQL 报错:动态执行表不可访问,本会话的自动统计被禁止。 在执行菜单里你可以禁止统计,或在v$session,v$sesstat 和vSstatname表里获得选择权限。

热门文章

  1. Mybatis 查询一个对象包含多个子对象 (List 包含 List)
  2. 《深入理解java虚拟机》笔记(8)类的加载机制
  3. 关于C#操作Excel,复制Sheet的记录
  4. Ubuntu下安装Yarm-PM2
  5. 基于JAVA的设计模式之单例模式
  6. Random类、ThreadLocalRandom类
  7. Spring 设计原则
  8. 切记切记:Spring配置文件中,Component-scan无法扫描到的类中的自动装配对象无法被调用,报空指针错误。
  9. 《超实用的Node.js代码段》连载二:正确拼接Buffer
  10. Oracle创建用户、表(1)