1414: 集裝箱裝載
時間限制: 1 Sec 內存限制: 128 MB
提交: 45 解決: 27
您該題的狀態:已完成
[提交][狀態][討論版]
題目描述
有一批共n個集裝箱要裝上艘載重量爲c的輪船,其中集裝箱i的重量爲wi。找出一種最優裝載方案,將輪船儘可能裝滿,即在裝載體積不受限制的情況下,將儘可能重的集裝箱裝上輪船。
輸入
第一行有2個正整數n和c。n是集裝箱數,c是輪船的載重量。第2行中有n個正整數,表示集裝箱的重量(0<n<10000,0<c<32767)。
輸出
計算出的最大裝載重量輸出。
樣例輸入
<span style="color:black">5 10
7 2 6 5 4</span>
樣例輸出
<span style="color:black">10</span>
提示
來源
題目智能推薦 |
01揹包問題
不得不說測試數據真水。
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[10001][2770];
int a[10001];
int cmp(int x,int y)
{
return x>y;
}
int main()
{
int n,c;
int i,j;
scanf("%d %d",&n,&c);
{
int max=0;
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+1+n,cmp);
for(i=1;i<=n;i++)
{
for(j=1;j<=c;j++)
{
dp[i][j]=dp[i-1][j];
if(a[i]<=j)
{
dp[i][j]=dp[i][j]>dp[i-1][j-a[i]]+a[i]?dp[i][j]:dp[i-1][j-a[i]]+a[i];
}
}
}
printf("%d\n",dp[n][c]);
}
return 0;
}