问题标题: 酷町堂:1389 自行车比赛(bike)

0
2
已解决
梁锦程
梁锦程
高级光能
高级光能

80分,大佬们帮忙看一下@陆麟瑞 @邵逸儒 @栾峻岩 @葛新 。。。

 

#include<iostream>
#include<algorithm>
using namespace std;
struct pt
{
    int s,v;
    double x;
}a[11];
bool cmp(pt a,pt b)
{
    return a.x>b.x;
}
int main()
{
    int i,n,j,s=0;
    cin>>n;
    for(i=1;i<=10;i++)
    {
        cin>>a[i].v;
        a[i].s=i;
        a[i].x=a[i].v*1.0/i;
    }
    sort(a+1,a+11,cmp);
    while(n!=0)
    {
        j=10;
        while(1)
        {
            if(n-a[j].s>=0)
            {
                n-=a[j].s;
                s+=a[j].v;
                break;
            }
            j-- ;
        }
    }
    cout<<s;
    return 0;
}

 


0
已采纳
陆麟瑞
陆麟瑞
资深天翼
资深天翼

dp大法好。

for i:=1 to n do
 begin
        f[i]:=maxint;
        for j:=1 to 10 do
        if i>=j then f[i]:=min(f[i-j]+a[j],f[i]);
 end;

解是f[n];

2
张睿杰
张睿杰
初级天翼
初级天翼
定义整形变量n,w[100001],c[100001],f[100001];
int main()
{
    输入n
    for (int i=1; i<=10; i++) 
    {
        输入c[i]
        w[i]=i;
    }
    把f[0]赋为0
    for(int i=1; i<=n; i++)
        f[i]=50001;
    for(int i=1; i<=10; i++)
    {
        for (int v=i; v<=n; v++)
        {
            if (f[v-w[i]]+c[i]<f[v]) f[v]=f[v-w[i]]+c[i];
        }
    }
    输出f[n]
}

这就是完完全全的无限背包

0
我要回答