#30967: 似乎複雜度為 n ,測試有過,但送出解答後卻錯誤百出,是不是我這個方法根本不可行啊,求救!


1000110001519 (牙)

學校 : 不指定學校
編號 : 195994
來源 : [140.116.131.15]
最後登入時間 :
2022-11-03 19:30:29
h065. 一二三木頭人 (Freeze) -- TOI練習賽202112潛力組 | From: [1.200.145.70] | 發表日期 : 2022-06-26 14:45

#include <iostream>
#include <string>
#include <cstdlib>
#include <iomanip>
#include <algorithm>
using namespace std;

int main(void)
{
    int n,k,t;
    cin>>n>>k>>t;
    int m[n];
    for(int i=0;i<n;i++)
    {
        cin>>m[i];
    }
    int mx[n]={0};
    mx[0]=m[0];
    int count=1;
    for(int i=1;i<n;i++)
    {
        if(count==0 or count==t)
        {
            if(count==t)
            {
                count=0;
            }
            if(i-k-1>=0)
            {
                if(mx[i-k-1]+m[i]>mx[i-1])
                {
                    mx[i]=mx[i-k-1]+m[i];
                    count++;
                }
                else
                {
                    mx[i]=mx[i-1];
                }
            }
            else
            {
                if(m[i]>mx[i-1])
                {
                    mx[i]=m[i];
                    count++;
                }
                else
                {
                    m[i]=m[i-1];
                }
            }
        }
        else if(count<t)
        {
            mx[i]=mx[i-1]+m[i];
            count++;
        }
    }
    cout<<mx[n-1];
    
    return 0;
}

 
#30971: Re: 似乎複雜度為 n ,測試有過,但送出解答後卻錯誤百出,是不是我這個方法根本不可行啊,求救!


linlincaleb@gmail.com (臨末之頌)

學校 : 新北市立板橋高級中學
編號 : 132772
來源 : [111.248.111.135]
最後登入時間 :
2023-04-01 22:41:13
h065. 一二三木頭人 (Freeze) -- TOI練習賽202112潛力組 | From: [111.248.160.133] | 發表日期 : 2022-06-27 09:17

#include
#include
#include
#include
#include
using namespace std;

int main(void)
{
    int n,k,t;
    cin>>n>>k>>t;
    int m[n];
    for(int i=0;i    {
        cin>>m[i];
    }
    int mx[n]={0};
    mx[0]=m[0];
    int count=1;
    for(int i=1;i    {
        if(count==0 or count==t)
        {
            if(count==t)
            {
                count=0;
            }
            if(i-k-1>=0)
            {
                if(mx[i-k-1]+m[i]>mx[i-1])
                {
                    mx[i]=mx[i-k-1]+m[i];
                    count++;
                }
                else
                {
                    mx[i]=mx[i-1];
                }
            }
            else
            {
                if(m[i]>mx[i-1])
                {
                    mx[i]=m[i];
                    count++;
                }
                else
                {
                    m[i]=m[i-1];
                }
            }
        }
        else if(count        {
            mx[i]=mx[i-1]+m[i];
            count++;
        }
    }
    cout<    
    return 0;
}

不知道你的code寫的是啥解法 可能需要描述一下

 
ZeroJudge Forum