题目:打水漂

题目描述

题目描述:
君不知,打靶大牛goleenuoer可喜欢打水漂了,他的靶子可以打到河面上的任何一条鱼,可是他的水漂打得实在是烂,无论怎么打那石子只会在河面上跳跃两次就“扑通”了.这天他又来打了.这条宽w米,每隔一米都会有一条鱼,每条鱼都有它的美观值.他想知道如何打才能得到两条鱼之间最大的美观值总和.刚接触OI的他想请您来解答,您能帮助他吗???

输入格式

输入文件包含n+1个整数,第一行为一个整数n(n<=10000).从第二行工n个数,第i个整数表示第i条鱼的美观值范(围为-500..500).当所有整数都为负数时输出0.

输出格式

输出文件包含两行,第一行为石子的起点和落点,用空格隔开.第二行为一个整数表示所得到的两条鱼之间美观值总和.

 

 

题解:

用动态规划求最大加权线的问题。

代码实现:

#include<iostream>
#include<cstring>
using namespace std;

int f[10001]={0},n;

int main()
{
    int i,j;
    cin>>n;bool p=1;
    for(i=1;i<=n;i++)
    {cin>>f[i];if(f[i]>=0) p=0;}
    
    if(p==1) {cout<<0<<endl;return 0;}
    for(i=1;i<=n;i++)
    f[i]+=f[i-1];
    
    int ans=-100000,x,y;
    
    for(i=1;i<=n;i++)
    for(j=1;j<=i;j++)
    if(f[i]-f[j-1]>ans) {ans=f[i]-f[j-1];x=j;y=i;}
    
    cout<<x<<" "<<y<<endl<<ans<<endl;
    return 0;
    
    }
posted on 2012-01-16 23:13  怡红公子  阅读(238)  评论(0编辑  收藏  举报