搜索啊,怎么找到的?从写挂的里面找到的
首先,一个思路就是贪心如果左脑的所用时间少就加在左脑,如果右脑所有时间少就加在右脑
所以,贪心肯定不对
#include#include #include #include using namespace std; int a[5]; int sum1,sum2; int t,homework; int main() { for(int i=1;i<=4;i++) { cin>>a[i]; } for(int i=1;i<=4;i++) { sum1=sum2=0; for(int j=1;j<=a[i];j++) { cin>>homework; if(sum1<=sum2) sum1+=homework; else sum2+=homework;//看看哪边时间短 t+=max(sum1,sum2); } } cout<
所以,这个题绝对不是贪心,需要用贪心的对立面来做,也就是
动态规划!!!!
对于每一个题有且只有两个状态,一个是加在左脑,一个是加到右脑,所以就是一个叫做01背包的东西
其实这里还可以用一个思想,将一边的脑子加到最接近一半则另一边的脑子就是正解#include#include #include #include #include using namespace std; int a[5]; int sum; int t; int homework[21],f[2501]; int main() { for(int i=1;i<=4;i++) { cin>>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--) f[k]=max(f[k],f[k-homework[j]]+homework[j]);//01背包 t+=sum-f[sum/2]; for(int j=1;j<=sum/2;j++) f[j]=0; } cout<



