zoukankan      html  css  js  c++  java
  • hrbust1841再就业(状态压缩dp)

    本人刚学压缩dp,只能对这些水题写题解 一方面对自己的理解有加深作用 另一方面希望和各位大牛交流交流。。。。。

    如果有对状态dp不太了解的童鞋可以参考入门知识:http://wenku.baidu.com/link?url=AnHFiSXoqPvVCxObtwNYEUCVfPL6_2QeuA9B1zkdmVk59Fy_f-CwZCuHwtHl6Wc9zbMmIyaaOOpSR1sRVvTGff3d-4D4SfhD2k-Gf-ijrOG

    以及我最开始看的状态dp水题:http://poj.org/problem?id=3254

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 int dp[16][1<<17];///表示最大相亲的好感和
     6 void solve(int n,int a[16][16])
     7 {
     8     int w=1<<n;
     9     memset(dp,0,sizeof(dp));///清0,用0表示没有此状态
    10     for(int i=0; i<n; i++)
    11     {
    12         dp[0][1<<i]=a[0][i];///对于出状态进行预处理,即第一行的状态暴力一下
    13     }
    14     for(int i=0; i<n-1; i++)///第一层循环遍历0~n-1行
    15     {
    16         for(int j=0; j<w; j++)///第二层循环遍历0~(1<<n)的状态
    17         {
    18             if(dp[i][j]!=0)///对于非0的状态进行处理
    19                 for(int k=0; k<n; k++)
    20                 {
    21                     if(!(j&(1<<k)))///j里有1<<k的状态
    22                     {
    23                         if(dp[i+1][j+(1<<k)]<=dp[i][j]+a[i+1][k])///求第i+1行的最大值
    24                             dp[i+1][j+(1<<k)]=dp[i][j]+a[i+1][k];
    25                     }
    26                 }
    27         }
    28     }
    29     int ans=0;
    30     for(int i=0; i<w; i++)
    31     {
    32         if(ans<dp[n-1][i])
    33             ans=dp[n-1][i];///对于最后一行的状态遍历求dp
    34     }
    35     printf("%d\n",ans);
    36 }
    37 int main()
    38 {
    39     int a[16][16];
    40     int t;
    41     scanf("%d",&t);
    42     while(t--)
    43     {
    44         int n;
    45         scanf("%d",&n);
    46         for(int i=0; i<n; i++)
    47             for(int j=0; j<n; j++)
    48             {
    49                 scanf("%d",&a[i][j]);
    50             }
    51         solve(n,a);
    52     }
    53 }
  • 相关阅读:
    「UVA12293」 Box Game
    「CF803C」 Maximal GCD
    「CF525D」Arthur and Walls
    「CF442C」 Artem and Array
    LeetCode lcci 16.03 交点
    LeetCode 1305 两棵二叉搜索树中的所有元素
    LeetCode 1040 移动石子直到连续 II
    LeetCode 664 奇怪的打印机
    iOS UIPageViewController系统方法崩溃修复
    LeetCode 334 递增的三元子序列
  • 原文地址:https://www.cnblogs.com/guyahan/p/5436580.html
Copyright © 2011-2022 走看看