zoukankan      html  css  js  c++  java
  • POJ 2184 DP

    思路:
    f[j]表示当ts的和为j的时候tf的最大值。
    这时候要分情况讨论:
    (我把状态平移了101000)
    若ts[i]>=0倒序循环
    否则正序 (防止ts被用了多次)

    f[101000]=0;
    for(int i=1;i<=n;i++)
        if(ts[i]>=0)
            for(int j=202000-ts[i];j>=0;j--)
                f[j+ts[i]]=max(f[j+ts[i]],f[j]+tf[i]);
        else
            for(int j=-ts[i];j<=202000;j++)
                f[j+ts[i]]=max(f[j+ts[i]],f[j]+tf[i]);
    
    // by SiriusRen
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int n,ts[105],tf[105],f[202005],ans=0;
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d%d",&ts[i],&tf[i]);
        memset(f,0xcf,sizeof(f));
        f[101000]=0;
        for(int i=1;i<=n;i++)
            if(ts[i]>=0)
                for(int j=202000-ts[i];j>=0;j--)
                    f[j+ts[i]]=max(f[j+ts[i]],f[j]+tf[i]);
            else
                for(int j=-ts[i];j<=202000;j++)
                    f[j+ts[i]]=max(f[j+ts[i]],f[j]+tf[i]);
        for(int i=101000;i<=202000;i++)
            if(f[i]>=0)ans=max(ans,f[i]+i-101000);
        printf("%d
    ",ans);
    }
    

    这里写图片描述

  • 相关阅读:
    蓝桥杯 大数定理
    蓝桥杯 密码发生器
    简单定时器的使用
    Eclipse中更改Project Explorer的字体
    列的别名修改
    ||拼接字符串
    SQL知识总结
    java 打开记事本
    报表使用分组
    js处理异步问题
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532337.html
Copyright © 2011-2022 走看看