hihoCoder#1044 : 状态压缩·一
2016-03-13 19:52
232 查看
http://hihocoder.com/problemset/problem/1044
#include <iostream> using namespace std; int N, M, Q; int W[1010]; int dp[1020][1025]; int countTwo[11] = { 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023 }; int countOne[1030]; int main() { scanf("%d%d%d", &N, &M, &Q); for (int i = 1; i <= N; i++) scanf("%d",&W[i]); for (int i = 0; i <= countTwo[M]; i++) { int count = 0, num = i; while (num != 0) { if (num & 1) { count++; } num = num >> 1; } countOne[i] = count; } int ans = 0; for (int i = 1; i <= N;i++) { for (int j =0; j <1<<M; j++) { int left = j >> 1; int right = (j >> 1) + countTwo[M - 1] + 1; int beforei = dp[i - 1][left] > dp[i - 1][right] ? dp[i - 1][left] : dp[i - 1][right]; if (countOne[j] <= Q&&j&1) { dp[i][j] = beforei + W[i]; ans = ans > dp[i][j] ? ans : dp[i][j]; } else dp[i][j] = beforei; } } cout << ans << endl; return 0; }
相关文章推荐
- Android反编译(一):apktool的使用
- Java 面试题81
- JavaWEB 核心编程视频教程 03
- 文件操作与JSON
- 【C#进阶系列】10 属性
- Java面试题51---70
- AlarmManager中set()和setRepeating()简介
- 20145201 《Java程序设计》第二周学习总结
- 2016最新手机号码正则、身份证JS正则表达式
- c语言入门经典必背18个程序
- 【C#进阶系列】09 属性
- Leetcode 58 Length of Last Word 字符串
- 学习笔记3
- 编程学习道路
- SqlServer数据库升级及常用配置
- UDP之间 的数据传输
- 设备相关信息
- HDOJ 1556 Color the ball(树状数组)
- 20145231第二周Java学习笔记
- 使用JDBC获取能自动增加的主键