杭电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;
}
}
}