sicily 1264(动态规划)

题目链接:sicily 1264

解题思路:

状态挺好想的(详见代码),但是得看透这题计算时间开销的本质——预处理,把所有时间开销的可能性处理处理,剩下的就简单了~

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int n,a[105],r;
double b,v,e,f,dis[10005],dp[105];
const double INF=1e9;

int main()
{
    while(~scanf("%d",&n)&&n)
    {
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        scanf("%lf %d %lf %lf %lf",&b,&r,&v,&e,&f);

        dis[0]=0;
        for(int x=0;x<=a[n];x++)
        {
            if(x>=r)
                dis[x+1]=dis[x] + 1/(v-e*(x-r));
            else
                dis[x+1]=dis[x] + 1/(v-f*(r-x));
        }

        for(int i=1;i<=n;i++)
        {
            dp[i]=dis[a[i]];
            for(int j=1;j<i;j++)
            {
                dp[i]=min(dp[i],dp[j]+dis[a[i]-a[j]]+b);
            }
        }
        printf("%.4lf\n",dp[n]);
    }

    return 0;
}

总结:

预处理很重要!不要因为是英文题目就看不透题目的本质啊!

时间: 2024-07-30 10:18:09

sicily 1264(动态规划)的相关文章

编程题目分类(剪辑)

1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. 模拟 12. 算术与代数 13. 组合问题 14. 数论 15. 网格,几何,计算几何 [编程入门] PC 110101, uva 100, The 3n+1 problem, 难度 1 PC 110102, uva 10189, Minesweeper, 难度 1 PC 110103, uva 10137, The T

sicily 1419(动态规划)

题目链接:sicily 1419 解题思路:(一道稍微有点不一样的动态规划题目) 刚开始看到题目就立马想到一种动规的解法,用dp[i][j]表示第 i 个到达第 j 个点,可是这种做法有一个问题--推导下一个点的时候需要用到再上一个点的数据(因为越慢送的牛奶需要花费越多时间),这样时间复杂度就会达到o( n^3 ),必然超时,于是我们可以看出,要解这道题,要解决两个问题: 1)首先要搜遍所有的数据可能性:2)可以求得最终的总时间 这两个问题,想了好久,发现自己傻逼了-- 1)为了使总时间最小,那

sicily 1176 (动态规划)

题目连接:sicily 1176 解题思路: 题目看上去像是一道博弈的题,又像是一道区间型DP的题目(矩阵取数),而它跟矩阵取数的区别就是他是两个人在取数,所以每次对一个区间,我们应分两种情况考虑:第一个人取左边的数和取右边的数,而在分别考虑这两种情况时,我们又要根据贪心法则来获取上一个取数的区间.状态方程有点复杂,直接上代码了: // Problem#: 1176 // Submission#: 3601655 // The source code is licensed under Crea

sicily 1176. Two Ends (Top-down 动态规划+记忆化搜索 v.s. Bottom-up 动态规划)

DescriptionIn the two-player game "Two Ends", an even number of cards is laid out in a row. On each card, face up, is written a positive integer. Players take turns removing a card from either end of the row and placing the card in their pile. T

sicily 1176 two ends 动态规划解题

1176. Two Ends Constraints Time Limit: 1 secs, Memory Limit: 64 MB Description In the two-player game "Two Ends", an even number of cards is laid out in a row. On each card, face up, is written a positive integer. Players take turns removing a c

sicily 13602(动态规划)

题目链接: sicily 13602 拿到题目马上就想到动规了,而且应该算是棋盘型的DP,状态转移方程挺好想的,就直接上代码了: #include <bits/stdc++.h> using namespace std; long long dp[35][35]; //注意数据范围 int main() { int n; while(~scanf("%d",&n)&&n) { dp[0][0]=1; for(int i=1;i<=n;i++)

BZOJ 1264 AHOI2006 基因匹配Match 动态规划+树状数组

题目大意:给定n个数和两个长度为n*5的序列,每个数恰好出现5次,求两个序列的LCS n<=20000,序列长度就是10W,朴素的O(n^2)一定会超时 所以我们考虑LCS的一些性质 LCS的决策+1的条件是a[i]==b[j] 于是我们记录a序列中每个数的5个位置 扫一下b[i] 对于每个b[i]找到b[i]在a中的5个位置 这5个位置的每个f[pos]值都可以被b[i]更新 于是找到f[1]到f[pos-1]的最大值+1 更新f[pos]即可 这个用树状数组维护 时间复杂度O(nlogn)

(转)sicily题目分类

Sicily题目分类 ·         [数据结构/图论] 1310 Right-Heavy Tree   笛卡尔树相关,复杂度O(N)或O(NlogN). ·1426 Phone List         电话号码前缀检索,trie树相关. ·1443 Printer Queue      基本队列操作. ·1149 等价表达式         判断表达式是否等价(递归求解) ·1136 山海经             n长序列里求m次区间询问的最大连续子区间和.线段树/RMQ ·1252

Sicily 1146:Lenny&#39;s Lucky Lotto(dp)

题意:给出N,M,问有多少个长度为N的整数序列,满足所有数都在[1,M]内,并且每一个数至少是前一个数的两倍.例如给出N=4, M=10, 则有4个长度为4的整数序列满足条件: [1, 2, 4, 8], [1, 2, 4, 9], [1, 2, 4, 10], [1, 2, 5, 10] 分析:可用动态规划解题,假设dp[i][j],代表满足以整数i为尾数,长度为j的序列的个数(其中每一个数至少是前一个数的两倍).那么对于整数i,dp[i][j] 等于所有dp[k][j-1]的和,其中k满足: