zoukankan      html  css  js  c++  java
  • poj 1260 pearls (dp)

    很明显的,当vi<vj<vk且i可以用j来代替(即(si+10)*vi<si*vj)时,则当前解为最优解(因为si*vj<si*vk - -...)。

    用dp[j]表示前j种pearl的最小代价,i>j&i=1...n,dp[1]=(s1+10)*v1,用第i种pearl替代前i-j种,得状态转移方程:

    dp[i] = min(dp[j] + (sum[i]-sum[j]+10)*val[i]) ;

    代码:

    #include<cstdio>
    int sum[1001], val[1001], dp[1001] ;
    int main(){
        int t, i, j, n, min ;
        scanf("%d", &t) ;
        while(t--){
            scanf("%d", &n) ;
            sum[0] = dp[0] = 0 ;
            for(i=1; i<=n; i++){
                scanf("%d%d", &j, &val[i]) ;
                sum[i] = sum[i-1] + j ;
            }
            for(i=1; i<=n; i++){
                min = 2147483647 ;
                for(j=0; j<i; j++){
                    dp[i] = dp[j] + (sum[i]-sum[j]+10)*val[i] ;
                    if(dp[i]<min)   min = dp[i] ;
                }
                dp[i] = min ;
            }
            printf("%d\n", dp[n]) ;
        }
        return 0 ;

     }

  • 相关阅读:
    Solidity safesub防止溢出
    Solidity字符串拼接实现oraclize动态查询
    Solidity mapping循环
    Solidity 合约调用合约
    Solidity string to uint
    Solidity智能合约升级解决方案
    Solidity部署问题
    linux 安装xwiki
    linux 安装 java
    linux 安装tomcat
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2330793.html
Copyright © 2011-2022 走看看