zoukankan      html  css  js  c++  java
  • 幸福指数

    题目如下:

    a

    看完题目没有想法,记得leetcode上面有一道也是相同的输入,但是求解的是最大任务完成数量,好像是set模拟的,但是这个题目是所有的任务,

    都要完成,暴力的复杂度是15!,复杂度比较高,也没有贪心的性质,一直不会做。

    后来在大神师弟的指导下:

    他这么说:状压, 用一个2^15, dp[n]表示当前n对应二进制位1都完成了的最大幸福值, 然后和tsp差不多转移一下就行了。

    我不是很懂tsp转移,然后大概写了一下自己的理解,这个题目也无从提交判断正误,只能这样了。

     1 #include<bits/stdc++.h>
     2 #define pb push_back
     3 typedef long long ll;
     4 using namespace std;
     5 typedef pair<int, int> pii;
     6 const int maxn = 1e3 + 10;
     7 
     8 int t[20], d[20];
     9 int n;
    10 int dp[1 << 16];
    11 bool in[1 << 16];
    12 void solve() {
    13     cin >> n;
    14     for (int i = 0; i < n; i++) {
    15         cin >> t[i] >> d[i];
    16     }
    17     queue<int> q;
    18     q.push(0);
    19     while(!q.empty()) {
    20         int u = q.front(); q.pop();
    21         in[u] = 0;
    22         int s = 0;
    23         for (int i = 0; i < n; i++) {
    24             if(u & (1 << i)) s += t[i];
    25         }
    26         for (int i = 0; i < n; i++) {
    27             if(u & (1 << i)) continue;
    28             int v = dp[u] + 100;
    29             if(s + t[i] > d[i]) {
    30                 v -= s + t[i] - d[i];
    31             }
    32             int d = u | (1 << i);
    33             if(v > dp[d]) {
    34                 if(!in[d]) {
    35                     in[d] = 1;
    36                     q.push(d);
    37                 }
    38                 dp[d] = v;
    39             }
    40          }
    41     }
    42     cout << dp[(1 << n) - 1] << endl;
    43 }
    44 
    45 int main() {
    46     freopen("test.in", "r", stdin);
    47     //freopen("test.out", "w", stdout);
    48     solve();
    49     return 0;
    50 }
    View Code
  • 相关阅读:
    Bzoj4872: [Shoi2017]分手是祝愿
    大数据应用价值研究员--数据可视化工程师
    Angular Redux
    Reactive Redux
    Testing a Redux & React web application
    [转]于Fragment和Activity之间onCreateOptionsMenu的问题
    [转]探究java IO之FileInputStream类
    深入解析FileInputStream和FileOutputStream
    [转]慎用InputStream的read()方法
    [转]Android
  • 原文地址:https://www.cnblogs.com/y119777/p/7560337.html
Copyright © 2011-2022 走看看