2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest J Bottle动态规划
2016-10-28 16:26
405 查看
/* 题目描述:给定n个瓶子,每个瓶子里装一些水,瓶子i的容量是b[i],已经装了的水的量是a[i],现在选择尽量少的 瓶子,把所有水都倒到这几个瓶子里,保证所用瓶子数最少的条件下,要求倒的水的量尽量少,问最少 需要的瓶子数和对应的最小的倒水的量。 思路:dp[i][j][s]表示在前i个瓶子里,选择j个瓶子,且j个瓶子的总体积是s,这种情况下瓶子里原来有的最多的水量, 那么dp[i][j][s] = max(dp[i-1][j][s] + dp[i-1][j-1][s - b[i]] + a[i]) ,因此可以省去第一个维度,空间的复杂度是 1e6,时间复杂度是1e8。 所有瓶子里水量总和是tot,先将dp数组置为-INF,处理出所有的dp数组后,如果 dp[i][j][s] >= 0 (说明这种情况存在)&& s>=tot(说明总容量大于所有水量)时,考虑要不要更新k和t */ #pragma warning(disable:4786) #pragma comment(linker, "/STACK:102400000,102400000") #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stack> #include<queue> #include<map> #include<set> #include<vector> #include<cmath> #include<string> #include<sstream> #define LL long long #define FOR(i,f_start,f_end) for(int i=f_start;i<=f_end;++i) #define mem(a,x) memset(a,x,sizeof(a)) #define lson l,m,x<<1 #define rson m+1,r,x<<1|1 using namespace std; const int INF = 0x3f3f3f3f; const int mod = 1e9 + 7; const double PI = acos(-1.0); const double eps=1e-6; const int maxn = 1e2 + 5 ; int dp[maxn][maxn*maxn] ,a[maxn] ,b[maxn],sum[maxn]; int main() { int n ; while(scanf("%d",&n) != EOF ){ mem(sum , 0) ; mem(dp , 0) ; int tot = 0; FOR(i , 1 , n) scanf("%d",&a[i]); FOR(i , 1 , n) scanf("%d",&b[i]); FOR(i , 1 , n){ sum[i] = sum[i-1] + b[i] ; tot += a[i] ; } int k = INF , t = INF ; for(int i = 0 ; i<= n ; i++){ for(int j = 0 ; j <= sum ; j++){ dp[i][j] = -INF ; } } dp[0][0] = 0; for(int i = 1 ; i<= n ; i++){ for(int j = i ; j >= 1 ; j--){ for(int s = sum[i] ; s >= b[i] ; s--){ dp[j][s] = max(dp[j][s] , dp[j-1][s - b[i]] + a[i]); if(tot <= s && dp[j][s] >= 0 ){ if( j < k){ k = j; t = tot - dp[j][s] ; } else if( j == k ){ t = min(t , tot - dp[j][s]) ; } } } } } printf("%d %d\n",k , t); } return 0; }
相关文章推荐
- Codeforces 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror)
- 2016-2017 ACM-ICPC, NEERC (Online Mirror) 酱油记
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Prefer
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest J dp
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest A Toda2 贪心
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest G. Car Repair Shop(优先队列)
- 2016-2017 ACM-ICPC, NEERC, Central Subregional Contest【solved : 10 / 11】
- 2016-2017 ACM-ICPC, NEERC, Northern Subregional Contest G - Gangsters in Central City
- codeforces H. Delete Them(2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, )
- 2016-2017 ACM-ICPC, NEERC, Central Subregional Contest【9/11】
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) G 优先队列
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest J Bottles
- 2016-2017 ACM-ICPC, NEERC, Moscow Subregional Contest
- 2016-2017 ACM-ICPC, NEERC, Central Subregional Contest
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest
- 2016-2017 ACM-ICPC, NEERC, Central Subregional Contest J.Architect of Your Own Fortune
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) J dp 背包
- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest c 二分+bfs
- Codeforces 730 J. Bottles DP 0-1背包- 2016-2017 ACM-ICPC, NEERC, Southern Subregional Contest