zoukankan      html  css  js  c++  java
  • 洛谷P2029跳舞

    题目
    DP, 用的(dp[i][j])表示(i)之前的数选了(j)个得到的最大结果,然后状态转移方程应该是

    [if (j \% t == 0)~~dp[i][j] = max(dp[i][j], max(dp[i - 1][j] - S[i], dp[i - 1][j - 1] + S[i] + B[i]) ); ]

    [else~~dp[i][j] = max(dp[i][j], max(dp[i - 1][j] - S[i], dp[i - 1][j - 1] + S[i]) ); ]

    #include <iostream>
    #include <cstdio>	
    #include <algorithm>
    using namespace std;
    int n, t, maxn;		
    int S[1001010], B[100010];
    int sums[1001001], sumb[101001];
    int dp[5001][5001];//dp[i][j]表示前i个数已经连续跳了j次的最大得分, j属于1到t
    int main()                      
    {
     	scanf("%d%d", &n, &t);		
     	for (int i = 1; i <= n; i++)
    		scanf("%d", &S[i]);
     	for (int i = 1; i <= n; i++)
    		scanf("%d", &B[i]);
     	for (int i = 1; i <= n; i++)
    		dp[i][0] = dp[i - 1][0] - S[i];//初始化为负的前缀和,因为不选会扣分。 
     	for (int i = 1; i <= n; i++)
     		for (int j = i; j >= 1; j--)
     		{
     			if (j % t == 0)//
     				dp[i][j] = max(dp[i][j], max(dp[i - 1][j] - S[i], dp[i - 1][j - 1] + S[i] + B[i]) ); // [i-1][j]说明i这个位置的数不选。 
    			else
    				dp[i][j] = max(dp[i][j], max(dp[i - 1][j] - S[i], dp[i - 1][j - 1] + S[i])  );
    	 	}
     	for (int i = 1; i <= n; i++)
     		maxn = max(maxn, dp[n][i]);
     	printf("%d", maxn);
     	return 0;
    }
    
  • 相关阅读:
    有关.net 框架的学习笔记
    简单定义工程架构
    respondsToSelector的相关使用
    IOS框架和服务
    iOS常用第三方类库
    ios换肤思想,及工具类
    集成激光推送
    远程推送
    ios本地推送
    UIPopoverController 的使用
  • 原文地址:https://www.cnblogs.com/liuwenyao/p/11711819.html
Copyright © 2011-2022 走看看