主页 > 游戏开发  > 

学习总结2.14

学习总结2.14

深搜将题目分配,如果是两个题目,就可以出现左左,左右,右左,右右四种时间分配,再在其中找最小值,即是两脑共同处理的最小值

#include <stdio.h> int s[4]; int sum=0; int brain[25][25]; int min=999; int left=0,right=0; void dfs(int x,int y){ if(y>s[x]){//如果当前这套题目已经被复习完 if(max(left,right)<min) min=max(left,right);//更新最小值 return; }else{ left+=brain[x][y];//左脑处理 dfs(x,y+1);//递归 left-=brain[x][y];//回溯 right+=brain[x][y];//右脑处理 dfs(x,y+1);//递归 right-=brain[x][y];//回溯 } } int max(int a,int b){ return (a>b)?a:b; } int main() { for(int i=1;i<=4;i++){ scanf("%d",&s[i]); } for(int i=1;i<=4;i++){ left=0,right=0; min=999;//初始化 for(int j=1;j<=s[i];j++){ scanf("%d",&brain[i][j]); } dfs(i,1); sum+=min; } printf("%d\n",sum); return 0; }

比较简单的dp01背包

#include <stdio.h> int dp[205][205]={0}; int n,m,t; int a[205],b[205]; int max(int a,int b){ return (a>b)?a:b; } int main() { scanf("%d %d %d",&n,&m,&t); for(int i=1;i<=n;i++){ scanf("%d %d",&a[i],&b[i]); } for(int i=1;i<=n;i++){ for(int j=m;j>=a[i];j--){ for(int k=t;k>=b[i];k--){ dp[j][k]=max(dp[j][k],dp[j-a[i]][k-b[i]]+1); } } } printf("%d\n",dp[m][t]); return 0; }

标签:

学习总结2.14由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“学习总结2.14