這道題當初還覺得是什麼高深莫測的算法,dp仍是搜索剪枝,沒想到竟然是道普普統統的貪心+模擬。這都沒看出來,服了。c++
這道題錯在兩個地方:算法
之後必定記住,求n(n+1)<x的最大整數n,向下取整後,還要有一步循環相減,無論這一步是否有效spa
#include <bits/stdc++.h> using namespace std; vector<int> va,vb; int main() { int a,b; cin>>a>>b; int n=sqrt(2.0*(a+b)); while (n*(n+1)/2>(a+b)) n--; //cout<<"n=\t"<<n<<endl; for (int i=n;i>=1;i--) { if (a>=i) {a-=i;va.push_back(i);} else vb.push_back(i); } cout<<va.size()<<endl; if (!va.empty()) cout<<va[0]; for (int i=1;i<(int)va.size();i++) cout<<' '<<va[i]; cout<<endl; cout<<vb.size()<<endl; if (!vb.empty()) cout<<vb[0]; for (int i=1;i<(int)vb.size();i++) cout<<' '<<vb[i]; cout<<endl; return 0; }