hiho一下第137周《建造基地》DP

来源:互联网 发布:王者荣耀淘宝充值 编辑:程序博客网 时间:2024/04/29 14:50

QAQ好像最近hihocoder的题都可以暴力??


DP无脑枚举即可。。。吐舌头

DP[i] 表示 表示建设值为i时的最少花费

那么对于N层都分开计算,计算DP[1..K]时

对于DP[j]  需要去遍历所有的B[p],更新方程为

dp[j]=min(dp[max(j-b[p],0LL)]+a[p],dp[j]);

max(j-b[p,0]) 是考虑到有些b特别大但划算的情况


#include <bits/stdc++.h>using namespace std;long long dp[10502];long long a[105],b[105];int main(){    long long  Q,N,M,K,T;    cin>>Q;    while(Q--)    {        cin>>N>>M>>K>>T;        for(int i=1; i<=M; i++)            scanf("%lld",&a[i]);        for(int i=1; i<=M; i++)            scanf("%lld",&b[i]);        long long sum=0;        for (int i=1; i<=N; i++)        {            for(int j=1; j<=K; j++) dp[j]=1e16;            for(int j=1; j<=K; j++)                for (int p=1; p<=M; p++)                    dp[j]=min(dp[max(j-b[p],0LL)]+a[p],dp[j]);            for (int p=1; p<=M; p++)                b[p]=b[p]/T;            sum+=dp[K];          }        if (sum<1e16)            printf("%lld\n",sum );        else printf("No Answer\n");    }}


0 0
原创粉丝点击