過去のウィジェットの疑惑を見る
3164 ワード
問題C最大積
時間制限:1 Secメモリ制限:128 MB
[コミット]
タイトルの説明
n個の要素からなるシーケンスSを入力すると、最大積の連続サブシーケンスを見つける必要があります.この最大積が正数でない場合、出力-1
入力
入力は、複数のデータ群を含み、各データ群の第1の行の正の整数n、第2の行のn個の要素からなるシーケンスS、1<=n<=18、-10<=Si<=10
しゅつりょく
各データセットの結果を出力して改行する
サンプル入力
3
2 4 -3
5
2 5 -1 2 -1
サンプル出力
8
20
もともと難しい問題ではなかったが、連続してトップから始めなければならないのではないだろうか.
次に、なぜこの問題が発生したのかを説明します.
まずojが通過したプログラムを貼ります(copy他の人のここで引用)
最初から積が最大のサブシーケンスしか見つからない中間最大のサブシーケンスは見つからない
次は3番目のforループを変更します
j=iに変更すると、最も大きなサブシーケンスが先頭を含まないことが保証されます.
次は自分で書いた
しかしojは最初の
入力した場合
9
0 -1 0 2 3 0 7 8 0
ojが通過したプログラムは-1である
改めることと自分の得ることは56です
私が問題を読めなかったのか、それともなぜか.
時間制限:1 Secメモリ制限:128 MB
[コミット]
タイトルの説明
n個の要素からなるシーケンスSを入力すると、最大積の連続サブシーケンスを見つける必要があります.この最大積が正数でない場合、出力-1
入力
入力は、複数のデータ群を含み、各データ群の第1の行の正の整数n、第2の行のn個の要素からなるシーケンスS、1<=n<=18、-10<=Si<=10
しゅつりょく
各データセットの結果を出力して改行する
サンプル入力
3
2 4 -3
5
2 5 -1 2 -1
サンプル出力
8
20
もともと難しい問題ではなかったが、連続してトップから始めなければならないのではないだろうか.
次に、なぜこの問題が発生したのかを説明します.
まずojが通過したプログラムを貼ります(copy他の人のここで引用)
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int a[30];
int i,j;
int main()
{
int n;
long long w;
long long ans;
while(scanf("%d",&n)!=EOF)
{
for(i=0; ians)
ans=w;
}
}
if(ans>0)
cout<
2 2番目のforループがどのような役割を果たすか分からない次のforループが毎回j=0で始まる以上n回実行しても意味がない最初から積が最大のサブシーケンスしか見つからない中間最大のサブシーケンスは見つからない
次は3番目のforループを変更します
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int a[30];
int i,j;
int main()
{
int n;
long long w;
long long ans;
while(scanf("%d",&n)!=EOF)
{
for(i=0; ians)
ans=w;
}
}
if(ans>0)
cout<
j=iに変更すると、最も大きなサブシーケンスが先頭を含まないことが保証されます.
次は自分で書いた
#include
#define N 0
int main(){
int a[20]={N},zero[20]={0};
int num0,num,num1,fu1,fu2,most,num10,most1,result;
int n,m,k;
while (scanf("%d",&n)!=EOF){
num0=num=num1=m=fu1=fu2=num10=0;
most=most1=1;
k=1;
result=0;
while(k<=n){
scanf("%d",&a[k]);
if(a[k]==0){
zero[++m]=k;0
num0++;///0
}
if(a[k]==10)
num10++;
k++;
}
if((n==1 && a[1]<1) || num0==n)
printf("-1
");
else
{//else0
if(num10==n){
printf("1");
for(int b=0;b2){
for(int q=zero[i]+1;q0)
printf("%d
",result);
else
printf("-1
");
num10=0;
}
}//else0
}
return 0;
}
しかしojは最初の
入力した場合
9
0 -1 0 2 3 0 7 8 0
ojが通過したプログラムは-1である
改めることと自分の得ることは56です
私が問題を読めなかったのか、それともなぜか.