样例美国,输出2,求条
查看原帖
样例美国,输出2,求条
1011907
_QWQ_TAT_楼主2025/7/25 20:41
#include <bits/stdc++.h>
using namespace std;

int n,w;
int a[20];
int dp[(1<<18)+5][20];

int main(){
    memset(dp,0x3f,sizeof(dp));
    cin>>n>>w;
    for (int i=1;i<=n;i++){
        cin>>a[i];
    }
    for (int i=1;i<=n;i++) dp[0][i]=w;
    for (int i=1;i<(1<<n);i++){
        for (int j=1;j<=n;j++){
            for (int k=0;k<n;k++){
                if (!(i&(1<<k)))continue;
                int now=i^(1<<k);
                if (dp[now][j]+a[k+1]>w){
                    dp[i][j+1]=min(dp[i][j+1],a[k+1]);
                }else{
                    dp[i][j]=min(dp[i][j],dp[now][j]+a[k+1]);
                }
            }            
        }
    }
    for (int i=1;i<(1<<n);i++){
    	cout<<i<<" "; 
    	for (int j=1;j<=n;j++){
    		cout<<dp[i][j]<<" ";
		}cout<<"\n\n";
	} 
    for (int i=1;i<=n;i++){
        if (dp[(1<<n)-1][i]!=0x3f3f3f3f){
        	cout<<i;
        	break;
		}
    }
}
2025/7/25 20:41
加载中...