hdoj1300 Pearls

原题链接https://acm.dingbacode.com/showproblem.php?pid=1300题意:

        一个公司要买珍珠,总共有100个品质的珍珠,对于每个品质的珍珠,如果要购买必须额外支付10颗珍珠的价钱。有些方案可以花更少的钱买更高的品质的珍珠,但是不能买更差的珍珠,求每份清单最少花的钱。

反思:

        赛时的错误思路:

        个人赛的时候没有写出来,没有想到dp,甚至赛后查题解的时候也不能理解为什么要用dp。比赛的时候的思路大概是下面这样 如果可以买得起订单上更好一级品质的珍珠,就把当前品质的珍珠数量加到上面那一级去,这样重复然后逐级往上。

//这个代码是错哒!
for(int i=0;i<n-1;++i)
{
    if((a[i]+10)*p[i]>=p[i+1]*a[i])
    {
        a[i+1]+=a[i];
        a[i]=0;
    }
}
for(int i=0;i<n;++i)
    if(a[i]!=0)
        sum+=((10+a[i])*p[i]);

        赛时觉得没问题,以为是细节错了。结果赛后一看,怎么是dp......晚上回去想了想,自己原来的思路确实有问题。之前那样的方式只比较了钱的多少没有具体记录下来,钱少了就往前买更好一级品质的珍珠,可是没有算买了更好的珍珠而省下来的钱,这省下来的钱可能在之后整体买更高一级的珍珠上可以用到。

        查了题解,大家给这题取的标题是容易dp,或者..”看了题目,很容易想到用到dp“之类的话

        好叭 还是做题少了~

        感觉自己还是太容易陷进自己的思维就出不来了,下次记得wa的时候想想自己的方法有没有存在漏洞。

代码:

#include<iostream>
#include<algorithm>
const int N=105;
int a[N],p[N],dp[N],cnt[N];
int main()
{
    using namespace std;
    int T,c;
    cin>>T;
    while(T--)
    {
        cin>>c;
        for(int i=1;i<=c;++i)
        {
            cin>>a[i]>>p[i];
            cnt[i]=cnt[i-1]+a[i];//cnt数组记录前i种珍珠的数量总和
            dp[i]=dp[i-1]+(a[i]+10)*p[i];//先不考虑最优的情况
        }
        for(int i=2;i<=c;++i)//dp[i]表示前i种最少花费的钱数
            for(int j=0;j<i;++j)
                dp[i]=min(dp[i],dp[j]+(cnt[i]-cnt[j]+10)*p[i]);//表示第j种到第i种都在品质i上购买
        cout<<dp[c]<<endl;
    }
}

疑问:

        上面是参考别人代码的,但是看了仍存在几个疑问。

        1.为什么在优化方案时一定要取连续种类的珍珠?

        因为比如在A,B,C三个依次递增的品质的珍珠里购买,如果B按自己的价格购买,那么以B的价格来买A肯定比以C的价格来买B要便宜。而题目里说是想通过购买比实际需要的更高质量的珍珠来省钱 而不是一定要追求更好品质的珍珠,所以这里一定是连续的区间。

        2.为什么j的循环要从j=0开始?珍珠的标号在这里不是从1开始吗?

        因为要考虑所有情况,有可能前面一个珍珠都不取,全部取最高品质的珍珠。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值