dp 注意不能越界 软件开发 i个人 求做两个软件 每个软件m块 花费最小时间 五重循环 1 第几个人 2,3,4,5 循环 比较第i个人和之前的人那个做的多 #include #include #include using namespace std; int n,m; int d1[105],d2[105]; int dp[105][105][105]; int main() { //freopen("development.txt","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++) cin>>d1[i]>>d2[i]; for(int i=0;i<=m;i++) { for(int j=0;j<=m;j++) { dp[1][i][j]=d1[1]*i+d2[1]*j; } } /* for(int k=0;k<=m;k++) { for(int l=0;l<=m;l++) cout<=0;done1--) { for(int done2=m;done2>=0;done2--) { // for(int need1=0;need1<=done1;need1++) { for(int need2=0;need2<=done2;need2++) { int temp; //temp=d1[i]*need1+d2[i]*need2-dp[i-1][done1][done2]; /* if(temp>0) dp[i][done1+need1][done2+need2]=min(dp[i-1][done1+need1][done2+need2],dp[i-1][done1][done2]+temp); else*/ //dp[i][done1+need1][done2+need2]=/*min(dp[i-1][done1+need1][done2+need2],*/dp[i-1][done1][done2]/*)*/; temp=d1[i]*need1+d2[i]*need2; dp[i][done1][done2]=min(dp[i][done1][done2],max(dp[i-1][done1-need1][done2-need2],temp)); } } } } } cout<k>j-m