• bzoj P2748


    这题第一次看到智障的以为是二分。。。

    但是后来发现有好几天,二分的话时间复杂度反而会加大(还不如枚举)。。

    又看到当前的音量会影响到后面的音量,所以要保存状态。。

    那不就是dp吗??但是最后要求输出最大音量,所以其实是个bool型dp

    设f[i][j]为前i天能否达到j音量,然后就枚举天数和音量,判断一下是否可行,如果可行就为true

    最后统计一下第n天所能达到的最大音量,并输出:

    #include<bits/stdc++.h>
    using namespace std;
    short f[55][1010];
    int a[55];
    int n,l,r;
    int main(){
    scanf(
    "%d%d%d",n,l,r);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    f[
    0][l]=1;
    for(int i=1;i<=n;i++)
    for(int j=0;j<=r;j++){
    if(j-a[i]>=0)
    f[i][j]
    |=f[i-1][j-a[i]];
    if(j+a[i]<=r)
    f[i][j]
    |=f[i-1][j+a[i]];
    }
    for(int i=r;i>=0;i--)if(f[n][i]){printf("%d ",i);return 0;}
    puts(
    "-1");
    return 0;
    }
  • 相关阅读:
    POJ 1511
    POJ 1125
    POJ 2240
    POJ 1459
    POJ 1274
    POJ 1789
    POJ 2485,1258
    POJ 1236
    POJ 1273
    Ruby on Rails 观后感
  • 原文地址:https://www.cnblogs.com/heqingyu/p/7687378.html
Copyright © 2020-2023  润新知