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

    题意:

    给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。

    规定买任一类的珍珠n个(价格为p),都要支付(n+10)*p的钱,即额外支付10*p。

     


    (1)       要求要买的珍珠的数量是一定的

    (2)       所买的珍珠的质量允许提高,但不允许下降(即可以用高质量珍珠替代低质量)

    (3)       输入时,后输入的珍珠价格一定比前面输入的要贵

    (4)       由(2)(3)知,珍珠的替代必须是连续的,不能跳跃替代。因为,假如方案是用第 i+2 类去替代第 i 类珍珠,而用第 i+1 类去替代第 i 类珍珠会使最终的支付价格更加低;所以,一定是因为第 i+2 类代替了第 i+1 类后会使最终的支付价格更低而使第i类直接被第 i+2 类代替。由此递推得出,若第 i 类被第 j 类代替,那么 i 和 j 之间的所有类都会被第j类代替。


     

    令f[i]表示在已知第i类珍珠时,所需支付的最低价格

    则状态方程为:

    f[i]=(a[i]+10)*p[i]+f[i-1];  //当第i种珍珠出现时,未优化价格的情况

    f[i]=min(f[i],(sum[i]-sum[j]+10)*p[i]+f[j]);  //枚举j,价格优化

     

    f[0]=0;  //初始化


     

    // Time 0ms; Memory 220K
    #include<iostream>
    using namespace std;
    int main()
    {
    	int i,j,t,n,a[110],sum[110],p[110],f[110];
    	cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		sum[0]=0;
    		for(i=1;i<=n;i++)
    		{
    			cin>>a[i]>>p[i];
    			sum[i]=sum[i-1]+a[i];
    		}
    		f[0]=0;
    		for(i=1;i<=n;i++)
    		{
    			f[i]=f[i-1]+(a[i]+10)*p[i];
    			for(j=0;j<i-1;j++) if(f[i]>f[j]+(sum[i]-sum[j]+10)*p[i])
    			{
    				f[i]=f[j]+(sum[i]-sum[j]+10)*p[i];
    			}
    		}
    		cout<<f[n]<<endl;
    	}
    	return 0;
    }




  • 相关阅读:
    Django框架---- 自定义分页组件
    Django框架----Form组件补充
    ARM体系的异常中断
    ARM处理机模式--内部寄存器
    产品概述
    简单应用程序的设计 -重复前缀
    简单应用程序的设计字符串处理
    基本输入输出系统BIOS---显示输出
    基本输入输出系统BIOS---键盘输入
    中断
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3174400.html
Copyright © 2011-2022 走看看