程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ 3661-Running(DP)

POJ 3661-Running(DP)

編輯:C++入門知識

POJ 3661-Running(DP)


題目鏈接:點擊打開鏈接

題意: 在一條直線上運動,每分鐘可以運動距離a[i] ,每分鐘可以選擇運動或者休息,有一個疲勞系數,最初為0,每運動一分鐘疲勞系數加1,(不能大於m) 同理,每休息一分鐘,疲勞系數減1,(不能小於0)求n分鐘後最大運動距離,要求n分鐘時疲勞系數要為0.

兩個狀態,當前時間及當前疲勞系數。設 dp[i][j] =dp[i-1][j-1]+a[i] (j>0) else dp[i][j] =max(dp[i][j],max(dp[i-k][0],dp[i-k][k]) ) (k<=m&&k

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define maxn 1<<12
#define _ll __int64
#define ll long long
#define INF 0x3f3f3f3f
#define Mod 1000000007
#define pp pair
#define ull unsigned long long
using namespace std;
int dp[10002][502],n,m,a[10002];
void solve()
{
	memset(dp,0,sizeof(dp));
	dp[1][0]=0;dp[1][1]=a[1];
	for(int i=2;i<=n;i++)
	{
		for(int j=0;j<=m;j++)
		{
			if(j==0)
			{
				int tem=-1;
				for(int k=0;k<=m&&k記憶化不太好寫。。不寫了~~


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved