跑跑卡丁车 hdu

来源:互联网 发布:射手播放器 mac 字幕 编辑:程序博客网 时间:2024/04/27 22:32

http://acm.hdu.edu.cn/showproblem.php?pid=1494

题意不说了

写的时候转移方程想错了,导致错了一天

第二次 写的时候又看别人解题报告然后自己写 还是错

方程貌似不太难想 但题目不看清的话 会被坑死的

我就被坑死了

第二次找错的时候才 发现自己把每个状态想错了

改了之后终于才AC 泪流满面啊

代码:

#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <map>using namespace std;int dp[100005][20];int sq[205];int reduce[205];int main(){    int squre,L;    while(scanf("%d%d",&L,&squre)!=EOF)    {        int len=(L*squre);        int minx=999999999;        memset(dp,0,sizeof(dp));        for(int i=0;i<L;i++)        scanf("%d",&sq[i]);        for(int i=0;i<L;i++)        scanf("%d",&reduce[i]);        for(int i=0;i<=len;i++)        for(int j=0;j<=14;j++)        dp[i][j]=minx;        dp[1][1]=sq[0];        for(int i=0;i<len;i++)        {           for(int j=0;j<=14;j++)            {                if(j==14)                {                    dp[i+1][10]=min(dp[i+1][10],dp[i][j]+sq[i%L]);                    dp[i+1][9]=min(dp[i+1][9],dp[i][j]+reduce[i%L]);                }                else                dp[i+1][j+1]=min(dp[i][j]+sq[i%L],dp[i+1][j+1]);                if(j-5>=0)                dp[i+1][j-5]=min(dp[i+1][j-5],dp[i][j]+reduce[i%L]);            }        }        for(int i=0;i<=14;i++)        if(dp[len][i]<minx)        minx=dp[len][i];        printf("%d\n",minx);    }}



原创粉丝点击