[단순 DP] HDU 1260 Tickets

[2차 순위 Attempted] HDU 1260 Tickets
4
  • 제목: 1인용 K장이 있고 각자의 티켓 발행 시간이 있으며 K-1장의 2인용 티켓이 있고 각자의 티켓 발행 시간이 있다.이 2인표는 1,2,3(3,4)...이렇게 두 사람을 구성하는 발권 시간이다.최소한 얼마 동안 모든 표를 팔아야 하는지 물어보세요.DP 방정식을 열거해서 하면 된다
  • My_Feeling: 시합할 때 30분도 안 돼서 이 문제를 풀었는데 계속 문제를 못 읽었어요.너무 이상해.정상적인 생활에서 영화표가 나오면 한 장 한 장 나오는 게 틀림없기 때문에 나는 2인표가 현재 상태에서 몇 장을 썼는지 기록했다.이렇게 직접 상장할 줄 알았으면 그냥 안 해도 되고 내려야 돼.그리고 그때도 DP로 할 생각을 못 했어요. 어차피 제목도 안 맞았고 방법도 안 맞았죠.나중에 시합에서 보충 문제를 풀었는데, 나는 여전히 넘을 수 없다는 것을 발견했고, 나중에 선배에게 물어서야 내가 문제를 잘못 이해했다는 것을 알았다.tcl
  • #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #define P(x) x>0?x:0
    #define INF 0x3f3f3f3f
    
    using namespace std;
    typedef long long ll;
    typedef vector<int>:: iterator VITer;
    const int maxn=2e3+5;
    
    int k;
    int t;
    int N;
    int s[maxn],d[maxn];
    int dp[maxn];//  m          
    
    int main()
    {
        scanf("%d",&N);
        while(N--)
        {
            scanf("%d",&k);
            t=0;
            for(int i=1;i<=k;i++)
                scanf("%d",&s[i]);
            for(int i=2;i<=k;i++)
                scanf("%d",&d[i]);
            fill(dp,dp+k+1,0);
            dp[1]=s[1];
            for(int i=2;i<=k;i++)
                dp[i]=min(dp[i-1]+s[i],dp[i-2]+d[i]);
            t=dp[k];
            int h=t/3600;
            t-=h*3600;
            int m=t/60;
            t-=m*60;
            h+=8;
            if(h<=12)
                printf("%.2d:%.2d:%.2d am
    "
    ,h,m,t); else { h-=12; printf("%.2d:%.2d:%.2d pm
    "
    ,h,m,t); } } return 0; }

    좋은 웹페이지 즐겨찾기