zoukankan      html  css  js  c++  java
  • <USACO07JAN>解决问题Problem Solvingの思路

    日常为dp贡献脑细胞

    #include<iostream>
    #include<cmath>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int dp[310][310],fst[310],lst[310];
    int n,p;
    int main()
    {
        int i,j,k;
        memset(dp,5,sizeof(dp));
        scanf("%d%d",&n,&p);
        for(i=1;i<=p;i++)scanf("%d%d",&fst[i],&lst[i]);
        dp[1][1]=1;dp[1][0]=2;dp[0][0]=0;
        for(i=1;i<=p;i++)
        {
            fst[i]+=fst[i-1];lst[i]+=lst[i-1];//前缀和方便算几个任务一共的钱 
        }
        for(i=2;i<=p;i++)//总共已完成的
        {
            //本月完成任务!! 
            for(j=1;j<=i;j++)//本月完成的
            {
                for(k=0;k<=i-j;k++)//上月完成的(欠了多少 
                {
                    if(fst[i]-fst[i-j]+lst[i-j]-lst[i-j-k]<=n)//钱够得话.利用前缀和 算一段任务的钱
                        dp[i][j]=min(dp[i][j],dp[i-j][k]+1);
                } 
            }
            //本月不完成任务
            for(k=1;k<=p;k++)if(lst[i]-lst[i-k]<=n)dp[i][0]=min(dp[i][k]+1,dp[i][0]);//就还债 
        }
        int ans=dp[p][0]+1;
        for(i=1;i<=p;i++)//倒二月完成的.最后月还 
            if(lst[p]-lst[i-p]<=n)ans=min(ans,dp[p][i]+2);
        printf("%d",ans);
    return 0;    
    }
    点击查看丑陋の代码&注释

     

     

  • 相关阅读:
    java oop
    traceroute
    ping
    ICMP Internet控制报文协议
    window,centos双系统坏了
    bcm53344 gpio驱动分析
    ioctl参数cmd=2错误
    BCM_GPIO驱动测试
    C++ 类和对象
    C++ 内存管理
  • 原文地址:https://www.cnblogs.com/pile8852/p/9278540.html
Copyright © 2011-2022 走看看