ZOJ3956
来源:互联网 发布:标题优化的好处 编辑:程序博客网 时间:2024/06/06 13:22
Course Selection System
题意是给出n对(Hi , Ci)
需要我们选出m对(m是我们自己选择的)使得
最大
看到C[i]的数据范围,大概感觉就是需要枚举的。我们观察一下这个式子,发现当∑Ci一定的时候Hi越大越好,这样的话我们可以直接把题目转化成一个01背包问题去求解。当∑C[i]一定时,如何获得最大的∑Hi
#include<cmath>#include<algorithm>#include<cstring>#include<string>#include<set>#include<map>#include<time.h>#include<cstdio>#include<vector>#include<stack>#include<queue>#include<iostream>using namespace std;#define LONG long longconst int INF=0x3f3f3f3f;const LONG MOD=1e9+ 7;const double PI=acos(-1.0);#define clrI(x) memset(x,-1,sizeof(x))#define clr0(x) memset(x,0,sizeof x)#define clr1(x) memset(x,INF,sizeof x)#define clr2(x) memset(x,-INF,sizeof x)#define EPS 1e-10#define lson l , mid , rt<< 1#define rson mid + 1 ,r , (rt<<1)+1#define root 1, m , 1LONG H[600] ;LONG C[600];LONG dp[60000] ;int main(){ int T ; cin>>T; while(T--) { clr0(dp) ; int n ; cin >>n ; int sum = 0 ; for( int i = 1; i<= n ;++ i) { scanf("%lld%lld",&H[i],&C[i]) ; sum += (int )C[i] ; } for( int i = 1; i <= n ;++ i) for(int j = sum ; j >= C[i] ; -- j) dp[j] = max(dp[j] , dp[j-C[i]] + H[i] ) ; LONG ans = 0 ; for(LONG i = 0 ; i <= (LONG )sum ; ++ i ) ans =max(ans , dp[i] * dp[i] - i * i - i * dp[i]) ; cout<<ans<<endl; }}
0 0
- ZOJ3956
- ZOJ3956背包
- zoj3956(dp)
- zoj3956 Course Selection System (背包)
- scut training 2 简单dp zoj3956
- 【ZOJ3956 The 17th Zhejiang University Programming Contest I】【01背包】Course Selection System 公式最大化
- 个人学习留笔
- 最简单的yii2安装教程
- 阿里巴巴B2B高效研发管理实践
- bootstrap学习总结-css组件(三)
- 帝国CMS7.2管理员密码重置
- ZOJ3956
- 算法导论(min-priority-queue 最小优先队列的部分实现)
- sql server 存储器使用
- jquery让页面滚动到底部
- Java序列化与反序列化
- Parcelable 序列化对象传递数据 以及传递集合demo
- 格式化2T以上大硬盘
- Oracle12C--用户管理(二十)
- Java虚拟机类加载机制