杭电OJ1003 1004

杭电OJ1003 Max Sum
大意:
算几个数的连续子序列的最大值,这让人想到了dp的连续不下降子序列,虽然两个并没什么大的关系。
几个数相加的最大值,算和,从起点为第一个数算起,一直相加到后面,令最大值mmax等于一个很小的数,让mmax和相加的数作比较,当相加的数大于mmax时,进行值的替换,和前后下标数的改变。
当相加的数和小于0时,我们就知道了和小于0,则再往后即使会往大走也不会是最大值的子序列,而如果下标一个一个的加一,那么它一直迈不过那个坎,就是那个很大的复数坎,所以应该改变起始下标,使下标在当前位置加一,继续以这个下标计算其的最大和值。
过程:细节错了,大意,之前写的没改过来,之后是presentation error ,因为没加换行符。

#include<iostream>
#include<algorithm>
#include<cstring>
const int maxn=100010;
int s[maxn];
using namespace std;
int main()
{
    int n,t;
    cin>>t;
    n=t;
        int num=1;
    while(n--)
    {
        int mmax=-1010;
        int a,b,sum=0;

        cin>>a;
        int qi,ten=1,mo;
        for(int i=1;i<=a;i++)
        {
            cin>>b;
            sum+=b;
            if(sum>mmax)
            {
                mmax=sum;
                qi=ten;
                mo=i;
             } 
             if(sum<0)
             {
                ten=i+1;
                sum=0;
              } 
        }
        cout<<"Case "<<num<<":"<<endl;
        cout<<mmax<<" "<<qi<<" "<<mo;
        if(num!=t)cout<<endl;
        cout<<endl;
        num++;
    } 
}

杭电oj 1004 Let the Balloon Rise
大意:
用strcmp进行单词比较,char a【】【】存储多个字符串,char a【i】为字符串i的地址,strcmp对地址进行比较,cout写地址输出字符串。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        if(n)
        {
        char a[1005][16];
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        int t[1005];
            memset(t,0,sizeof(t));
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                if(strcmp(a[i],a[j])==0)
                {
                    t[i]+=1;
                }
            }
        }

        int mmax=t[1];int xia=1;
        for(int i=1;i<=n;i++)
        {
            if(mmax<t[i])
            {
                xia=i;
                mmax=t[i];
            }

        }
        cout<<a[xia]<<endl;
 } 
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章