HDU 2546 H - 饭卡

来源:互联网 发布:传奇db数据 编辑:程序博客网 时间:2024/06/06 05:13

这道题主要是背包加点小脑洞,背包还是很基础也很好用的dp。

<span style="font-family:Microsoft YaHei;font-size:18px;">#include<bits/stdc++.h>using namespace std;int num[1005],dp[50005];int main() {int n;while(scanf("%d",&n) != EOF && n) {int sum = 0;for(int i = 1; i <= n;i++) {scanf("%d",&num[i]);      sum += num[i];}memset(dp,0,sizeof(dp));int mi;scanf("%d",&mi);if(mi < 5) printf("%d\n",mi);else if(sum <= mi-5)printf("%d\n",mi-sum);else {int m = 0,k;for(int i = 1;i <= n;i++)if(m < num[i]) {m = num[i];k = i;}num[k] = 0;for(int i = 1;i <= n;i++) for(int j = mi-5;j >= num[i];j--) dp[j] = max(dp[j],dp[j-num[i]]+num[i]);printf("%d\n",mi-(dp[mi-5]+m));}}}</span>
多刷题,努力,晚安~

0 0
原创粉丝点击