HDU 1300 Pearls

凭直觉猜测了一下,写了一个DP,居然能AC。

dp[i][j]表示第i种到第n种物品都买完且最小的单价是第j种物品时候的最小总费用

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

const long long INF=999999999999999;
const int maxn=100+10;
int T,n;
long long dp[maxn][maxn];
long long a[maxn],c[maxn];

int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i],&c[i]);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++) dp[i][j]=INF;

        dp[n][n]=c[n]*(a[n]+10);
        long long Min=dp[n][n];
        for(int i=n-1;i>=1;i--)
        {
            dp[i][i]=Min+c[i]*(a[i]+10);
            Min=dp[i][i];
            for(int j=i+1;j<=n;j++)
            {
                if(dp[i+1][j]==INF) continue;
                dp[i][j]=dp[i+1][j]+c[j]*a[i];
                Min=min(dp[i][j],Min);
            }
        }
        printf("%lld\n",Min);
    }

    return 0;
}
时间: 2025-01-05 11:46:22

HDU 1300 Pearls的相关文章

hdu 1300 Pearls (dp)

题目大意: 多种珍珠,每次选购都要在原有的数量上加上10. 例如:买5个单价是10的珍珠.需要的花费是(5+10)*10= 150.买100个单价是20的珍珠 需要的花费是(100+10)*20= 2200.总共需要的花费是150+2200=2350.如果把珍珠的质量提高了.需要的105个 珍珠都买单价是20的.也就是说都买质量好的.总的花费是(5+100+10)*20= 2300.在两组数据看来.珍珠都 买了高品质的了,而且花费也少了! 问题是怎么样能花费最少买珍珠! 思路分析: dp [i]

hdu 1300 Pearls(dp)

Pearls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2018    Accepted Submission(s): 953 Problem Description In Pearlania everybody is fond of pearls. One company, called The Royal Pearl, pro

HDOJ 1300 Pearls 斜率优化dp

原题连接:http://acm.hdu.edu.cn/showproblem.php?pid=1300 题意: 题目太长了..自己看吧 题解: 看懂题目,就会发现这是个傻逼dp题,斜率优化一下就好 代码: #include<iostream> #include<cstring> #include<vector> #include<cstdio> #define MAX_N 500 using namespace std; typedef long long

HDU 1300

http://acm.hdu.edu.cn/showproblem.php?pid=1300 这题大一就看到过,当时没读懂题目,今天再做就容易多了 题意:升序给出n个珍珠的的数量和价值,问买这些珍珠的最小花费,其中可以用价值高的珍珠等量代替价值小的珍珠,并且一种价钱如果决定买,必须多买10个保底 水dp,dp[i]表示买前i种珍珠的最小花费,枚举代替的区间 #include <iostream> #include <cstdio> #include <cstring>

Hdoj 1300 Pearls 【DP】

Pearls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1699    Accepted Submission(s): 778 Problem Description In Pearlania everybody is fond of pearls. One company, called The Royal Pearl, pro

HDU 1300 Pearls--dp

题意:有不同等级的珍珠,价格不同,现在列出需要买的珍珠,求花的最少的钱(可以买高等级的来代替低等级的) 分析:dp[i]表示从最低等级到 i 等级花的最少的钱,dp[i]=min(dp[j]+v) v是从j+1到i全买i等级花的钱.需要三重循环. 代码: #include<iostream> #include<algorithm> #include<cstdio> #define INF 1000000007 using namespace std; int t,n;

【转】斜率优化DP和四边形不等式优化DP整理

当dp的状态转移方程dp[i]的状态i需要从前面(0~i-1)个状态找出最优子决策做转移时 我们常常需要双重循环 (一重循环跑状态 i,一重循环跑 i 的所有子状态)这样的时间复杂度是O(N^2)而 斜率优化或者四边形不等式优化后的DP 可以将时间复杂度缩减到O(N) O(N^2)可以优化到O(N) ,O(N^3)可以优化到O(N^2),依次类推 斜率优化DP和四边形不等式优化DP主要的原理就是利用斜率或者四边形不等式等数学方法 在所有要判断的子状态中迅速做出判断,所以这里的优化其实是省去了枚举

HDU 5090 Game with Pearls(二分匹配)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5090 Problem Description Tom and Jerry are playing a game with tubes and pearls. The rule of the game is: 1) Tom and Jerry come up together with a number K. 2) Tom provides N tubes. Within each tube, the

HDU 5009 Paint Pearls _(:зゝ∠)_2014 ACM/ICPC Asia Regional Xi&#39;an Online

呵呵 #include <cstdio> #include <algorithm> #include <iostream> #include <cstring> typedef long long ll; using namespace std; const int N = 5 * 10000 + 5; int xval[N], dep; int n, a[N], pre[N]; ll d[N]; int pos[300], dd; void work()