hdu-acm新生赛-智能车

原题链接

前言

考场上想了半天,用了好多种思路,最后用背包类一维数组加上最大的最小值记忆化求解。

思路

我一开始想的思路,就不说了,直接说我最终解法是怎么得到的。
我想什么时候无法启动智能车,即判断存不存在电池的组合使得刚好达到所需电力?
我的脑海里冒出了暴力搜索,但是显然这种方法不可能。
记忆化搜索?我又试了试,果不其然,超时了。
根据我以往的经验来看,dp比搜索更高效
于是我开始构建dp数组-->轻松完成
如何找出这种搭配方法的最小的电池容量呢?
除去目标值不去计算最小值之外,其余电力计算达到这种搭配的最小值(好难讲)

代码

#include<iostream>
#include<algorithm>
using namespace std;
int a[50005]={0};
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,c;
        cin>>n>>c;
        int dp[505]={1};
        int ans=505;
        int mins[505]={0};
        for(int i=1;i<=n;i++)cin>>a[i];
        sort(a+1,a+n+1);
        for(int i=1;i<=n;i++)
        {
            for(int j=c;j>=a[i];j--)
            {
                if(dp[j-a[i]])
                {
                    if(j==c)
                    {
                        ans=min(ans,a[i]-mins[j-a[i]]);
                        continue;
                    }
                    if(j==a[i])mins[j]=a[i];
                    else
                    {
                        if(mins[j])mins[j]=max(mins[j],mins[j-a[i]]);
                        else mins[j]=mins[j-a[i]];
                    }
                    dp[j]=dp[j-a[i]];
                }
            }
        }
        if(ans!=505) cout<<ans<<endl;
        else puts("-1");
    }
    return 0;
}

posted @   纯粹的  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示