zoukankan      html  css  js  c++  java
  • Codeforces 864E Fire(背包DP)

      背包DP,决策的时候记一下 jc[i][j]=1 表示第i个物品容量为j的时候要选,输出方案的时候倒推就好了

    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn=2001;
    struct poi{int t,ddl,p,id;}a[maxn];
    int n,top,ansi,cnt;
    int f[110][maxn],st[maxn],jc[110][maxn];
    bool cmp(poi a,poi b){return a.ddl<b.ddl;}
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++) {
            scanf("%d%d%d",&a[i].t,&a[i].ddl,&a[i].p);
            a[i].id=i;
        }
        sort(a+1,a+1+n,cmp);
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<a[i].t;j++)f[i][j]=f[i-1][j];
            for(int j=a[i].t;j<=a[i].ddl-1;j++)
            {
                f[i][j]=f[i-1][j];
                if(f[i-1][j-a[i].t]+a[i].p>f[i][j])
                {
                    f[i][j]=f[i-1][j-a[i].t]+a[i].p;
                    jc[i][j]=1;
                }
            }
        }
        int ans=0;
        for(int i=0;i<a[n].ddl;i++)
        if(f[n][i]>ans)ans=f[n][i],ansi=i;
        for(int i=n;i&&ansi;i--)
        if(jc[i][ansi])cnt++,st[++top]=i,ansi-=a[i].t;
        printf("%d
    %d
    ",ans,cnt);
        for(;top;top--)printf("%d ",a[st[top]].id);
    }
    View Code
  • 相关阅读:
    eclipse使用
    模板模式

    异常处理
    内部类
    面向对象三大特征(三)--多态
    java双指针的简单理解
    简单易懂回溯算法
    《深入理解Java虚拟机》之(一、内存区域)
    Java笔记(第七篇 JDBC操作数据库)
  • 原文地址:https://www.cnblogs.com/Sakits/p/7596229.html
Copyright © 2011-2022 走看看