제출 #1326591

#제출 시각아이디문제언어결과실행 시간메모리
1326591Faisal_SaqibAliens (IOI16_aliens)C++20
25 / 100
1729 ms12460 KiB
#include <vector>
#include <iostream>
using namespace std;
typedef long long ll;
const int M=1002,N=502;
const ll inf=1e18;
ll dp[M][N],ndp[M][N];
ll take_photos(int n,int m,int k1,vector<int> r,vector<int> c)
{
    vector<int> a(m+2,0);
    for(int i=0;i<n;i++)
    {
        int x=min(r[i],c[i]);
        a[x]=max(a[x],r[i]+c[i]-x-x+1);
        // cout<<x<<' '<<r[i]<<' '<<c[i]<<endl;
    }
    for(int j=0;j<=m;j++)
    {
        // cout<<a[j]<<' ';
        for(int i=0;i<=n;i++)
        {
            dp[j][i]=ndp[j][i]=inf;
        }
    }
    // cout<<endl;
    dp[0][0]=0;
    for(int i=0;i<=m;i++)
    {
        // cout<<"Dp value for "<<i<<endl;
        // for(int p=0;p<=m;p++)
        // {
        //     for(int k=0;k<=n;k++)
        //     {
        //         cout<<dp[p][k]<<' ';
        //     }
        //     cout<<endl;
        // }
        // cout<<endl;
        vector<ll> mi(m+2,inf);
        for(int k=0;k<=n;k++)
        {
            for(int p=0;p<=m;p++)
            {
                dp[p][k]=min(dp[p][k],mi[p]+(1ll*p*p));
                mi[p]=min(mi[p],dp[p][k]-(1ll*p*p));
                if(p)mi[p]=min(mi[p],mi[p-1]);
            }
        }
        // cout<<"Dp value for "<<i<<endl;
        // for(int p=0;p<=m;p++)
        // {
        //     for(int k=0;k<=n;k++)
        //     {
        //         cout<<dp[p][k]<<' ';
        //     }
        //     cout<<endl;
        // }
        // cout<<endl;
        // if(i==m)continue;
        for(int p=m;p>=0;p--)
        {
            for(int k=0;k<=n;k++)
            {
                if(p>=a[i])
                {
                    // cout<<"updating "<<max(p-1,0)<<' '<<k<<' '<<dp[p][k]<<endl;
                    ndp[max(p-1,0)][k]=min(ndp[max(p-1,0)][k],dp[p][k]);
                }
                dp[p][k]=ndp[p][k];
                ndp[p][k]=inf;
            }
        }
    }
    ll ans=inf;
    // cout<<"Dp value for "<<i<<endl;
    for(int p=0;p<=m;p++)
    {
        for(int k=0;k<=k1;k++)
        {
            ans=min(ans,dp[p][k]);
            // cout<<dp[p][k]<<' ';
        }
        // cout<<endl;
    }
    // cout<<endl;    
    return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

aliens.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
aliens_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...