程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 1003 Max Sum 簡單動態規劃

hdu 1003 Max Sum 簡單動態規劃

編輯:C++入門知識

hdu 1003 Max Sum 簡單動態規劃


很簡單的動態規劃但ac率低於四分之一了,狀態轉移方程:

dp[i]=max(dp[i-1]+a[i],a[i])
注意幾點:

case 之間有空格

輸入的最小負數為-1000

有多組答案找出第一個的意思是,從頭便利,得到第一個最大的和就輸出被,然後break;

/*************************************************************************
	> File Name: hdu1231.cpp
	> Author: yang
	> Mail:[email protected] 
	> Created Time: 2014年08月24日 星期日 20:01:52
 ************************************************************************/

#include
#include
#include
using namespace std;
#define N 100005
int main(){
	int n;
	int a[N],dp[N],start[N],t,p=1;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		int flag=0,cou=0;
		for(int i=1;i<=n;i++){
			scanf("%d",&a[i]);
			dp[i]=0;
		}
		int x=1;
		memset(dp,0,sizeof(dp));
		for(int i=1;i<=n;i++){
			if(dp[i-1]+a[i]>=a[i])
				dp[i]=dp[i-1]+a[i];
			else{
				x=i;
				dp[i]=a[i];
			}
			start[i]=x;
		}
		cou=-1002;
		printf("Case %d:\n",p++);
		for(int i=1;i<=n;i++)
			if(dp[i]>cou)
				cou=dp[i];
		for(int i=1;i<=n;i++){
			if(cou==dp[i]){
				cout<

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