zoukankan      html  css  js  c++  java
  • ZOJ 3956 Course Selection System 背包DP

    ZOJ3956 观察数据范围, c的值非常小 只有100 所以c的和也很有限 只有50000 是否可以从这里下手?

    对于某一个c的和 我们一定希望h的和最大 才有可能是最终答案。 于是有了类似背包的dp方程。

    代码很简单,就不给出方程了。

    //比赛的时候想得太多,都想到斜率优化上了,完全忽略了c的范围这么小!!!毕竟图样。

    //一个人的面命运,当然要靠自我奋斗,但是也要考虑到历史的行程。

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<algorithm>
    using namespace std;
    typedef long long int LL;
    const int maxn=500*100+10;
    LL dp[maxn],h[501],c[501];
    int main()
    {freopen("t.txt","r",stdin);
     int T;
     scanf("%d",&T);
     while(T--)
     	{
     	 memset(dp,0,sizeof(dp));
     	 int n;
     	 scanf("%d",&n);
     	 LL sum=0;
     	 for(int i=0;i<n;i++)
     	 {
    	  
     	 	scanf("%d%d",&h[i],&c[i]);
     	 	sum+=c[i];
     	 }
     	 LL ans=0;
     	 for(int i=0;i<n;i++)
     	 	 for(int j=sum;j>=c[i];j--)
     	 	 	 dp[j]=max(dp[j],dp[j-c[i]]+h[i]);
     	 for(int j=0;j<=sum;j++)
     	 	ans=max(ans,dp[j]*dp[j]-j*dp[j]-j*j);
     	 printf("%lld
    ",ans);
    	}
     return 0;
    }
    

      

  • 相关阅读:
    PGA
    impdp导入job
    11g SQL Monitor
    Oracle buffer cache
    OGG异常处理
    Android中dp、dpi与px的关系
    android:gravity设置居中的问题
    Oracle触发器详解
    Android selector中的item的顺序
    selector在color和drawable目录下的区别
  • 原文地址:https://www.cnblogs.com/heisenberg-/p/6783495.html
Copyright © 2011-2022 走看看