问题标题: 酷町堂:为什么1053只有70分

3
1
已解决
刘斐
刘斐
高级守护
高级守护
#include<iostream>
using namespace std;
int n,k,minv=1000010,time1[10010];
int jq[10010];
void dfs(int t,int s) 
{   
    if(t>n)
    {
        if(minv>s)
        {
            minv=s;
        }
        return;
    }
    if(s>=minv) return;
    for(int i=1;i<=k;i++)
    {
        if(jq[i]+time1[t]<minv)
        {
            jq[i]+=time1[t];
            dfs(t+1,(s>jq[i]?s:jq[i]));
            jq[i]-=time1[t];
        }   
    }
}
int main()
{
    cin>>n>>k;
    int sum=0;
    for(int i=1;i<=n;i++)
    {
        cin>>time1[i];
        sum+=time1[i];  
    }
    if(k==1)
    {
        cout<<sum;
        return 0;
    }
    dfs(1,0);
    cout<<minv;
    return 0;
}

只有70分!


0
已采纳
臧启亚
臧启亚
初级光能
初级光能

核心代码

int main() {
    scanf("%d%d",&n,&k);
    for(int i=1; i<=n; i++) 
        scanf("%d",&a[i]);
    search(1,0);
    cout<<minn;
    return 0;
}
void search(int x,int y) {
    if(y>=minn)return;
    if(x>n) { 
        if(y<minn)minn=y;
        return;
    }
    for(int i=1; i<=k; i++) {
        if(s[i]+a[x]<=minn) { 
            s[i]+=a[x];
            search(x+1,max(y,s[i]));
            s[i]-=a[x];
        }
    }

 

0
刘凯南
刘凯南
高级守护
高级守护

if(minv>s){minv=s;}可改为minv=min(minv,s);

0
0
0
0
0
杨舰中
杨舰中
高级守护
高级守护

你没加头文件

      int main()

 

0
陆麟瑞
陆麟瑞
资深天翼
资深天翼

你一开始把数组从大到小排序试试看。

陆麟瑞在2018-01-31 13:14:39追加了内容

这样应该可以。

我要回答