问题标题: 1053

2
1
已解决
张瑀涵
张瑀涵
高级光能
高级光能
#include<iostream>    
using namespace std;  
int n,k,ans=32635352,a[1001],s[1001];  
void search(int x,int y)  
{   
    if(ans<=y) 
        return ;
    if(x>n)  
    {  
        if(ans>y) 
            ans=y;  
        return ;  
    }  
    for(int i=1;i<=k;i++)
    {
        if(s[i]+a[x]<ans) 
        {  
            s[i]+=a[x];
            search(x+1,max(y,s[i]));
            s[i]-=a[x]; 
        }  
    }
    return ;  
}  
int main()  
{    
    cin>>n>>k;
    for(int i=1;i<=n;i++)  
        cin>>a[i];  
    search(1,0);  
    cout<<ans;  
    return 0;  
}  

70分。


2
已采纳
屠永乐
屠永乐
高级守护
高级守护

输入后对n个数从大到小排序,再搜索!

2
杨喆
杨喆
初级守护
初级守护

屠林轩 说的是对的,从大到小排序,会先得到最小值

1
蒋智航
蒋智航
高级天翼
高级天翼
void dfs(int x,int y)  
{  
    int i;  
    if (ans<=y) return; 
    if (x==n+1)  
    {  
        if (ans>y) ans=y;  
        return;  
    }  
    for (i=1;i<=k;++i)  
    if (s[i]+a[x]<ans)  
    {  
        s[i]+=a[x]; 
        dfs(x+1,max(y,s[i]));  
        s[i]-=a[x];
    }  
    return;  
}  

int main()  
{  
    int i;  
xxxxxxxxxxxxx//省略
xxxxxxxxxxxxx//省略
xxxxxxxxxxxxx//省略
xxxxxxxxxxxxx//省略,自己写
        dfs(1,0);  
    printf("%d",ans);  

 

0
我要回答