zoukankan      html  css  js  c++  java
  • POJ #1260

    DP is, enumeration + pruning. If you can think of enumeration pattern of a problem, plus a recurrence relation later, you are there.

    Main ref: http://blog.csdn.net/kindlucy/article/details/5761795

    The basic scenario is non-optimized case; all other possible cases, are optimized, and we try each solution of that.

    //    1260 - Pearls
    //    http://blog.csdn.net/kindlucy/article/details/5761795
    //
    #include <stdio.h>
    
    #define MAX_CAT 100
    #define Min(a,b) (a) < (b) ? (a) : (b)
    
    int calc(int cnt, int ai[MAX_CAT], int pi[MAX_CAT])
    {    
        int sum[MAX_CAT] = { 0 };
        for (int i = 1; i <= cnt; i++)
        {
            sum[i] = sum[i - 1] + ai[i - 1];
        }
    
        int dp[MAX_CAT + 1] = { 0 };
        for (int i = 1; i <= cnt; i++)    // dp[i]
        {
            int currmin = (ai[i - 1] + 10) * pi[i - 1] + dp[i - 1];    // non-optimized
            for (int j = 0; j < i; j ++)    // try each replacement solution
            {
                int currtry = dp[j] + (sum[i] - sum[j] + 10) * pi[i - 1];
                currmin = Min(currmin, currtry);
            }
            dp[i] = currmin;
        }
    
        return dp[cnt];
    }
    
    int main()
    {
        int n; scanf("%d", &n);
        while (n--)
        {
            int ai[MAX_CAT] = { 0 };
            int pi[MAX_CAT] = { 0 };
    
            int cnt; scanf("%d", &cnt);
            for (int i = 0; i < cnt; i++)
            {
                scanf("%d%d", ai + i, pi + i);
            }
    
            int ret = calc(cnt, ai, pi);
            printf("%d
    ", ret);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    汉语编程
    第一次作业
    个人总结
    psp表格
    第三次个人作业——用例图设计
    第二次结对作业
    第一次结对作业
    第二次个人编程作业
    第一次编程作业
    第一次博客作业
  • 原文地址:https://www.cnblogs.com/tonix/p/3818256.html
Copyright © 2011-2022 走看看