Codeforces 366C Dima and Salad 背包DP
来源:互联网 发布:windows to go是什么 编辑:程序博客网 时间:2024/06/01 15:33
题目大意:
就是现在又n个水果, 每个水果都有两个属性值ai表示美味程度, bi表示能量值, 现在要求选出多个或一个水果, 使得选出的水果的ai和与bi和之比是k
问在这种清形可能出现的情况下ai的和最多是多少, 如果这样的情形不存在输出 -1
(1 <= n <= 100, 1 <= k <= 10, 1 <= ai, bi <= 100)
大致思路:
首先我们最终要满足sigma(ai)/sigma(bi) = k所以对于每一个水果记ci = ai - k*bi那么( -999 <= ci <= 99) 最终要求sigma(ci) == 0
那么每个水果的体积视为ci, 价值是ai, 问装满一个容量是0的背包最大能得到的价值是多少, 注意一个水果只能用一次, 所以是01背包不是完全背包, 剩下的就不用说了..
代码如下:
Result : Accepted Memory : 11748 KB Time : 31 ms
/* * Author: Gatevin * Created Time: 2015/3/22 14:19:47 * File Name: Chitoge_Kirisaki.cpp */#include<iostream>#include<sstream>#include<fstream>#include<vector>#include<list>#include<deque>#include<queue>#include<stack>#include<map>#include<set>#include<bitset>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<cctype>#include<cmath>#include<ctime>#include<iomanip>using namespace std;const double eps(1e-8);typedef long long lint;int dp[3000000];int a[110], b[110], n, k;int c[110];int idx = 100000;int main(){ scanf("%d %d", &n, &k); for(int i = 1; i <= n; i++) scanf("%d", a + i); for(int i = 1; i <= n; i++) scanf("%d", b + i); for(int i = 1; i <= n; i++) c[i] = a[i] - k*b[i]; memset(dp, -1, sizeof(dp)); dp[idx] = 0; for(int i = 1; i <= n; i++)//当然我写复杂了..算了懒得改了反正一个意思.. { if(c[i] >= 0) { for(int j = idx + idx; j >= 0; j--) if(j + c[i] <= idx + idx && dp[j] != -1) { dp[j + c[i]] = max(dp[j] + a[i], dp[j + c[i]]); //cout<<j<<" "<<dp[j]<<endl; } } else { for(int j = 0; j <= idx + 100000; j++) if(j + c[i] >= 0 && dp[j] != -1) dp[j + c[i]] = max(dp[j] + a[i], dp[j + c[i]]); } } if(dp[idx] == 0) dp[idx] = -1; printf("%d\n", dp[idx]); return 0;}
0 0
- Codeforces 366C Dima and Salad 背包DP
- CodeForces - 366C Dima and Salad (DP&01背包)
- Codeforces 366C Dima and Salad 【dp】
- codeforces 366 C Dima and Salad dp
- codeforces 366C Dima and Salad (01背包)
- CodeForces 366C-Dima and Salad【01背包】
- Codeforces 366C Dima and Salad【01背包】好题
- Codeforces 366C Dima and Salad (背包变形,DP好题)
- codeforces 366C C. Dima and Salad(dp)
- codeforces 366C C. Dima and Salad(dp)
- CodeForces 366C Dima and Salad
- CodeForces 366C Dima and Salad
- 366C - Dima and Salad(0-1 背包)
- C. Dima and Salad----01背包
- codeforces Dima and Salad
- Dima and Salad CodeForces
- CF 366C Dima and Salad [天平DP]
- C. Dima and Salad
- bootstrap + angular + requirejs + RESTful API
- PostgreSQL 中文资料汇总
- Spinner自定义下拉列表
- poj 1523 SPF
- 自己写的Java 数据结构Tree
- Codeforces 366C Dima and Salad 背包DP
- 动态树LCT||分块(BZOJ2002)
- java线程池实践
- 用c语言实现 编写一个函数,它从一个字符串中提取一个子字符串
- 静态、自适应、流式、响应式等布局的区别
- RocketMQ 消息队列简单部署
- 字符串比较
- C#实现文件下载的几种方式
- PHP中基本符号及使用方法