加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

hihocoder 1044 状态压缩dp

发布时间:2020-12-13 20:09:54 所属栏目:PHP教程 来源:网络整理
导读:#include cstdio #include iostream #include algorithm #include queue #include stack #include climits #include cstring #include cmath #include map #include set #define INF 100000000 using namespace std ; int n,m,q; int dp[ 1050 ][ 1100 ]; in
#include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <climits> #include <cstring> #include <cmath> #include <map> #include <set> #define INF 100000000 using namespace std; int n,m,q; int dp[1050][1100]; int num[1100]; int a[1050]; int f(int i){ int ans = 0; while(i){ ans += i&1; // cout <<"a " << i << endl; // cout << ( i^0 )<< endl; i >>= 1; } return ans; } void fun(){ for(int i = 0;i <= (1<<10);i++){ num[i] = f(i); } } int main(){ fun(); while(cin >> n >> m >> q){ for(int i = 0;i < n;i++){ scanf("%d",&a[i]); } memset(dp[0],0,sizeof(dp[0])); for(int i = 0;i < n;i++){ for(int s = 0; s < (1 << m);s++){ if(num[s] <= q){ if(s&1){ dp[i+1][s] = a[i]; dp[i+1][s] += max(dp[i][(s>>1)^(1<<(m-1))],dp[i][(s>>1)]); } else{ if(num[s] == q){ dp[i+1][s] = dp[i][s>>1]; } else{ dp[i+1][s] = max(dp[i][(s>>1)^(1<<(m-1))],dp[i][(s>>1)]); } } } else{ dp[i][s] = 0; } } } int max = 0; for(int i = 0;i < (1<<m);i++){ if(num[i] <= q && dp[n][i] > max){ max = dp[n][i]; } } printf("%d ",max); } return 0; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读