• HDU1300Pearls


    传送门

    描述:
    有几种不同的珍珠。每种珍珠都有它的单价。当然质量高的珍珠价格一定也是高的。
    为了避免买家只买1个珍珠。就要求不论是买了多少个珍珠都是需要在购买数量上加10.之后乘上单价。
    例如:买5个单价是10的珍珠。需要的花费是((5+10)×10=150).买100个单价是20的珍珠花费是((100+10)×20=2200)
    单价越大的珍珠可以顶替单价较小的珍珠
    求出满足珍珠要求的最小花费。

    sf

    首先可以发现,如果用价值较大的去顶替价值较小珍珠的时候

    要么划算,全部顶替

    要么不划算,一颗都不顶替

    然后,如果可以顶替价值较小珍珠还划算,那么去顶替价值稍大的珍珠也一定划算

    但是反过来结论并不成立。

    所以定义dp[i]为前i种的花费

    每次枚举当前珍珠要往前顶替几种珍珠

    如果没有注意到这个结论,那么就要枚举珍珠类别,枚举上一种珍珠选的个数,枚举这次要选的个数

    不管时间还是空间都吃不消

    #include <bits/stdc++.h>
    using namespace std;
    int shu[109],v[109],dp[109];
    int main()
    {
    	int t;
    	cin>>t;
    	while(t--)
    	{
    		int n;
    		cin>>n;
    		for(int i=1;i<=n;i++)	cin>>shu[i]>>v[i];
    		memset(dp,20,sizeof(dp));
    		dp[0]=0;
    		for(int i=1;i<=n;i++)
    		{
    			int num=0;
    			for(int j=1;j<=i;j++)//包括第i种的前j种
    			{
    				num+=shu[i-j+1];//要买这么多 
    				dp[i]=min(dp[i],dp[i-j]+(num+10)*v[i]);
    			} 
    		}
    		cout<<dp[n]<<endl;
    	}
    }
    
  • 相关阅读:
    python之timeit模块
    python isinstance函数
    继承
    冒泡排序&&选择排序
    监听器
    被钝化的代码
    Ajax验证用户名
    原生ajax访问服务器所展现的现象
    今天
    随机点名
  • 原文地址:https://www.cnblogs.com/iss-ue/p/12581566.html
Copyright © 2020-2023  润新知