kkksc03考前临时抱佛脚

~~

DP问题:可以当作01背包来做

~~
左右脑可以同时工作 但只能学一科 求所有科目完成的最少时间,所以可以一科一科的看。

#include <bits/stdc++.h>
using namespace std;
int a[5];
int sum,t;
int dp[2501],homework[21];

int main()
{
	for(int i=1;i<=4;i++)
		scanf("%d",&a[i]);
	for(int i=1;i<=4;i++){
		sum = 0;
		for(int j=1;j<=a[i];j++){
			cin>>homework[j];
			sum+=homework[j];
		}
		for(int j=1;j<=a[i];j++)
			for(int k=sum/2;k>=homework[j];k--)
				dp[k] = max(dp[k],dp[k-homework[j]]+homework[j]);
		
		t += sum-dp[sum/2];
		for(int j=1;j<=sum/2;j++)
			dp[j]=0;
	}
	cout<<t<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/zhimeng_LQ/article/details/105307941