DP之凑硬币并找面值

Dp

1,凑硬币:

如果我们有面值为1元、3元和5元的硬币若干枚,如何用最少的硬币凑够11元? 

状态转移方程:d(i)=min{d(i-vj)+1 },其中i-vj >=0vj表示第j个硬币的面值;

i    最小硬币数  取得硬币面值(上一级的i

比如,从上面的图我们可以看出,最终结果d(11)=d(10)+1(面值为1),而d(10)=d(5)+1(面值为5),最后d(5)=d(0)+1 (面值为5)。所以我们凑够11元最少需要的3枚硬币是:1元、5元、5元。

///不需找面值
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    int w[10]={0,1,3,5};
    int dp[100],n,book[100];
    int money[100];

    dp[0]=0;  ///此位置需初始化为0
    while(~ scanf("%d",&n))
    {
        for(int i=1;i<=n;i++)
            dp[i]=9999;
      for(int i=1;i<=n;i++)  ///凑够i元至少需要几枚硬币
      {
          for(int j=1;w[j]<=i;j++) ///表示w[j]小于当前i元,进行dp
          {
              dp[i]=min(dp[i],dp[i-w[j]]+1);
          }


      }
      printf("%d\n",dp[n]);
    }
    return 0;

}

找挑的面值为

///需找面值
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    int w[10]={0,1,3,5};
    int dp[100],n,book[100];
    int money[100];

    dp[0]=0;  ///此位置需初始化为0
    while(~ scanf("%d",&n))
    {
        for(int i=1;i<=n;i++)
            dp[i]=9999;
      for(int i=1;i<=n;i++)  ///凑够i元至少需要几枚硬币
      {
          for(int j=1;w[j]<=i;j++) ///表示w[i]小于当前i元,进行dp
          {
//              dp[i]=min(dp[i],dp[i-w[j]]+1);
                if(dp[i]>dp[i-w[j]]+1){
                    dp[i]=dp[i-w[j]]+1;
                    book[i]=i-w[j];   ///标记找出凑得硬币的面值,表示当前的上一个要找的i-w[i],

                }
          }


      }
      printf("%d\n",dp[n]);
      ///假设要找凑够n元需要硬币的面值是
          while(n)
          {
            printf("%d ",n-book[n]); ///将当前可用的钱数减去book[n](上一级可用的钱数)
            n=book[n];
          }
    }
    return 0;

}


Python中,我们可以使用`pandas`处理Excel文件中的数据,并结合`requests`和`BeautifulSoup`等库来填充到网页表单。以下是一个基本的步骤: 1. **安装所需库**: 首先确保已安装`pandas`, `openpyxl` (用于读取Excel文件), `requests`, 和 `beautifulsoup4` 等库。如果还没有安装,可以在命令行中运行: ```bash pip install pandas openpyxl requests beautifulsoup4 ``` 2. **读取Excel数据**: 使用`pandas`库读取Excel文件中的数据,假设文件名为`data.xlsx`,工作表名称为`Sheet1`。 ```python import pandas as pd df_excel = pd.read_excel(&#39;data.xlsx&#39;, sheet_name=&#39;Sheet1&#39;) data_list = df_excel.values.tolist() # 将DataFrame转换成列表 ``` 3. **获取网页内容**: 使用`requests`库获取网页HTML内容,例如访问URL `http://example.com/form`。 ```python url = "http://example.com/form" response = requests.get(url) soup = BeautifulSoup(response.text, &#39;html.parser&#39;) # 解析HTML ``` 4. **填写网页表单**: 找到需要填充数据的目标输入字段,可能是`input`标签,然后遍历`data_list`填充数据。这里假设`<input>`标签的`name`属性就是对应的Excel列名。 ```python for row in data_list: for field, value in zip(soup.find_all(&#39;input&#39;, {&#39;name&#39;: True}), row): input_field = field[&#39;name&#39;] input_value = value field.value = input_value # 可能需要根据实际结构调整这一行,比如`field.attrs[&#39;value&#39;] = input_value` # 如果有复选框或下拉菜单,可能需要使用不同的方法 checkbox_fields = soup.find_all(&#39;input&#39;, {&#39;type&#39;: &#39;checkbox&#39;}) dropdown_fields = soup.find_all(&#39;select&#39;) for checkbox in checkbox_fields: checkbox.checked = value_from_excel对应值 # 选择对应值 # 更新选择的选项 for dropdown in dropdown_fields: dropdown.select_one(value_from_excel对应值) # 选择对应值 ``` 5. **提交表单**: 提交表单,如果有`submit`按钮,可以用类似的方式找到并触发它。 6. **处理响应**: 提交后可能会返回新的页面或HTTP状态码,根据需求处理结果。 ```python submit_button = soup.find(&#39;button&#39;, {&#39;name&#39;: &#39;submit&#39;}) if submit_button: form.submit() else: print("No submit button found.") response = requests.post(url, data=your_filled_data) # 如果是POST请求 ``` 请注意,实际操作中可能需要根据目标网站的具体HTML结构进行相应的调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值