• 看正月点灯笼老师的笔记 —动态规划2.1


    这里主要是在听课时做的笔记  课堂链接  https://www.bilibili.com/video/av18512769

    第一题: 在一个数组arr中,找出一组不相邻的数字,使得最后的和最大。 

    //1. 在一个数组arr中,找出一组不相邻的数字,使得最后的和最大。
    //关键在于选于不选
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #define N 32
    int a[N],dp[N];
    int max(int a, int b) {
    	return  a > b ? a : b;
    }
    int recOpt(int n)   //递归
    {
    	if (n == 0)
    		return a[0];
    	if (n == 1)
    		return max(a[0], a[1]);
    	else
    	{
    		int A = recOpt(n - 2) + a[n];    //选
    		int B = recOpt(n - 1);           //不选
    		return max(A, B);
    	}
    }
    int dpOpt(int n)     //动态规划
    {
    	dp[1] = max(a[0], a[1]);
    	dp[0] = a[0];
    	for (int i = 2; i < n; i++)
    	{
    		dp[i] = max(dp[i - 2] + a[i], dp[i - 1]);
    	}
    	return dp[n - 1];
    }
    int main(void)
    {
    	int n;
    	while (scanf("%d", &n) != EOF)
    	{
    		for (int i = 0; i < n; i++)
    		{
    			scanf("%d", &a[i]);
    		}
    
    		printf("%d
    ", recOpt(n - 1));
    		printf("%d
    ", dpOpt(n));
    	}
    	system("pause");
    	return 0;
    }
    /*
      7
      1 2 4 1 7 8 3
      5
      4 1 1 9 1
    
      结果 15 13 
    */
    

      

  • 相关阅读:
    MySQL优化
    Java GC
    Java GC
    一致性哈希算法在分布缓存中的应用
    Hadoop
    Hbase 基础
    ORACLE
    ORACLE
    ORACLE
    ORACLE
  • 原文地址:https://www.cnblogs.com/asdfknjhu/p/12346389.html
Copyright © 2020-2023  润新知